annotate test/db_test_base.py @ 7674:b8aef93178db

fix: quote variable substitution To prevent issues with spaces in the variable. The var should be a single word but it pays to be careful. Courtesy of https://www.shellcheck.net/
author John Rouillard <rouilj@ieee.org>
date Tue, 24 Oct 2023 21:45:05 -0400
parents 5b41018617f2
children 25a03f1a8159
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
7582
978285986b2c fix: issue2551193 - Fix roundup for removal of cgi and cgitb ...
John Rouillard <rouilj@ieee.org>
parents: 7206
diff changeset
27 import logging
978285986b2c fix: issue2551193 - Fix roundup for removal of cgi and cgitb ...
John Rouillard <rouilj@ieee.org>
parents: 7206
diff changeset
28 from roundup.anypy.cgi_ import cgi
5388
d26921b851c3 Python 3 preparation: make relative imports explicit.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5381
diff changeset
29 from . import gpgmelib
5494
b7fa56ced601 use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5493
diff changeset
30 from email import message_from_string
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
31
5036
380d8d8b30a3 Replace existing run_tests.py script with a pytest script
John Kristensen <john@jerrykan.com>
parents: 5033
diff changeset
32 import pytest
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
33 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
34 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
35 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
36 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
37 roundupdb, i18n, hyperdb
4878
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
38 from roundup.cgi.templating import HTMLItem
5310
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
39 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
40 from roundup.cgi import client, actions
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
41 from roundup.cgi.engine_zopetal import RoundupPageTemplate
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
42 from roundup.cgi.templating import HTMLItem
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
43 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
44
5476
b0048969990d encoding fixes in test cases
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5469
diff changeset
45 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
46 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
47 from roundup.anypy.email_ import message_from_bytes
5468
0cde8a595893 fix tests for Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5395
diff changeset
48
6366
f2c31f5ec50b Move mocknull from test to roundup/test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6365
diff changeset
49 from roundup.test.mocknull import MockNull
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
50
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
51 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
52 config.DATABASE = "db"
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
53 config.RDBMS_NAME = "rounduptest"
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
54 config.RDBMS_HOST = "localhost"
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
55 config.RDBMS_USER = "rounduptest"
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
56 config.RDBMS_PASSWORD = "rounduptest"
4480
1613754d2646 Fix first part of Password handling security issue2550688
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4472
diff changeset
57 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
58 # 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
59 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
60 config.TRACKER_WEB = "http://tracker.example/cgi-bin/roundup.cgi/bugs/"
7170
2acea75cd7e5 Setting PBKDF2 rounds to 1000 for testing
John Rouillard <rouilj@ieee.org>
parents: 6968
diff changeset
61 # override number of rounds to reduce CI time
2acea75cd7e5 Setting PBKDF2 rounds to 1000 for testing
John Rouillard <rouilj@ieee.org>
parents: 6968
diff changeset
62 #config.PASSWORD_PBKDF2_DEFAULT_ROUNDS = 1000
2820
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
63 # 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
64 # 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
65 # to 'run_tests.py' script
3247
e629e0057136 disable file logging [SF#1155649]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3155
diff changeset
66 #config.LOGGING_FILENAME = "/tmp/logfile"
e629e0057136 disable file logging [SF#1155649]
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3155
diff changeset
67 #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
68 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
69
5878
1b57d8f3eb97 Add rudimentery experiment JSON Web Token (jwt) support
John Rouillard <rouilj@ieee.org>
parents: 5869
diff changeset
70 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
71 """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
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 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
74
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
75 """
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
76 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
77 try:
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
78 shutil.rmtree(dirname)
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5235
diff changeset
79 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
80 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
81 # create the instance
4082
5eb5f7e66c37 Adjust to new location for templates in source tree.
Stefan Seefeld <stefan@seefeld.name>
parents: 4005
diff changeset
82 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
83 '..',
5eb5f7e66c37 Adjust to new location for templates in source tree.
Stefan Seefeld <stefan@seefeld.name>
parents: 4005
diff changeset
84 'share',
5eb5f7e66c37 Adjust to new location for templates in source tree.
Stefan Seefeld <stefan@seefeld.name>
parents: 4005
diff changeset
85 'roundup',
5eb5f7e66c37 Adjust to new location for templates in source tree.
Stefan Seefeld <stefan@seefeld.name>
parents: 4005
diff changeset
86 'templates',
5eb5f7e66c37 Adjust to new location for templates in source tree.
Stefan Seefeld <stefan@seefeld.name>
parents: 4005
diff changeset
87 'classic'))
5041
5251e97b1de0 Configure the database backend in the config.ini
John Kristensen <john@jerrykan.com>
parents: 5036
diff changeset
88 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
89 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
90 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
91 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
92 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
93 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
94 return tracker
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
95
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
96 def setupSchema(db, create, module):
4850
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
97 mls = module.Class(db, "mls", name=String())
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
98 mls.setkey("name")
6403
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
99 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
100 keyword.setkey("name")
4850
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
101 status = module.Class(db, "status", name=String(), mls=Multilink("mls"))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
102 status.setkey("name")
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
103 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
104 priority.setkey("name")
5175
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
105 user = module.Class(db, "user", username=String(),
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
106 password=Password(quiet=True), assignable=Boolean(quiet=True),
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
107 age=Number(quiet=True), roles=String(), address=String(),
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
108 rating=Integer(quiet=True), supervisor=Link('user'),
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
109 realname=String(quiet=True), longnumber=Number(use_double=True))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
110 user.setkey("username")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
111 file = module.FileClass(db, "file", name=String(), type=String(),
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
112 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
113 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
114
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
115 # 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
116 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
117 mynosy.quiet = True
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
118 issue = module.IssueClass(db, "issue", title=String(indexme="yes"),
5175
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
119 status=Link("status"), nosy=mynosy, deadline=Date(quiet=True),
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
120 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
121 files=Multilink("file"), assignedto=Link('user', quiet=True,
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
122 rev_multilink='issues'), priority=Link('priority'),
6394
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
123 spam=Multilink('msg'), feedback=Link('msg'),
6403
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
124 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
125 stuff = module.Class(db, "stuff", stuff=String())
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
126 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
127 msg = module.FileClass(db, "msg", date=Date(),
5175
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
128 author=Link("user", do_journal='no'), files=Multilink('file'),
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
129 inreplyto=String(), messageid=String(),
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
130 recipients=Multilink("user", do_journal='no'))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
131 session.disableJournalling()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
132 db.post_init()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
133 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
134 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
135 password=password.Password('sekrit'))
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
136 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
137 password=password.Password('sekrit'), address='fred@example.com')
4850
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
138 u1 = mls.create(name="unread_1")
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
139 u2 = mls.create(name="unread_2")
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
140 status.create(name="unread",mls=[u1, u2])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
141 status.create(name="in-progress")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
142 status.create(name="testing")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
143 status.create(name="resolved")
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
144 priority.create(name="feature", order="2")
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
145 priority.create(name="wish", order="3")
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
146 priority.create(name="bug", order="1")
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
147 db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
148
4301
d47245c2530a Fix some security assertions and tests.
Richard Jones <richard@users.sourceforge.net>
parents: 4255
diff changeset
149 # nosy tests require this
d47245c2530a Fix some security assertions and tests.
Richard Jones <richard@users.sourceforge.net>
parents: 4255
diff changeset
150 db.security.addPermissionToRole('User', 'View', 'msg')
d47245c2530a Fix some security assertions and tests.
Richard Jones <richard@users.sourceforge.net>
parents: 4255
diff changeset
151
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
152 # quiet journal tests require this
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
153 # QuietJournal - reference used later in tests
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
154 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
155 properties=['username', 'supervisor', 'assignable'],
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
156 description="Prevent users from seeing roles")
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
157
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
158 db.security.addPermissionToRole("User", v1)
5033
63c79c0992ae Update tests to work with py.test
John Kristensen <john@jerrykan.com>
parents: 4886
diff changeset
159
63c79c0992ae Update tests to work with py.test
John Kristensen <john@jerrykan.com>
parents: 4886
diff changeset
160 class MyTestCase(object):
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
161 def tearDown(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
162 if hasattr(self, 'db'):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
163 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
164 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
165 shutil.rmtree(config.DATABASE)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
166
5315
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
167 def open_database(self, user='admin'):
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
168 self.db = self.module.Database(config, user)
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
169
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
170
5381
0942fe89e82e Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents: 5376
diff changeset
171 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
172 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
173 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
174
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
175 class commonDBTest(MyTestCase):
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
176 def setUp(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
177 # remove previous test, ignore errors
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
178 if os.path.exists(config.DATABASE):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
179 shutil.rmtree(config.DATABASE)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
180 os.makedirs(config.DATABASE + '/files')
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
181 self.open_database()
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
182 setupSchema(self.db, 1, self.module)
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
183
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
184 def iterSetup(self, classname='issue'):
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
185 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
186 def filt_iter_list(*args, **kw):
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
187 """ 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
188 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
189 def filter_test_iterator():
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
190 """ 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
191 appropriately
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
192 """
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 = False
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 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
197 yield (cls.filter)
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
198 yield (filt_iter_list)
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
199 return self.assertEqual, filter_test_iterator
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
200
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
201 def filteringSetupTransitiveSearch(self, classname='issue'):
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
202 u_m = {}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
203 k = 30
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
204 for user in (
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
205 {'username': 'ceo', 'age': 129},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
206 {'username': 'grouplead1', 'age': 29, 'supervisor': '3'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
207 {'username': 'grouplead2', 'age': 29, 'supervisor': '3'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
208 {'username': 'worker1', 'age': 25, 'supervisor' : '4'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
209 {'username': 'worker2', 'age': 24, 'supervisor' : '4'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
210 {'username': 'worker3', 'age': 23, 'supervisor' : '5'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
211 {'username': 'worker4', 'age': 22, 'supervisor' : '5'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
212 {'username': 'worker5', 'age': 21, 'supervisor' : '5'}):
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
213 u = self.db.user.create(**user)
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
214 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
215 , date = date.Date ('2006-01-%s' % k))
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
216 k -= 1
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
217 i = date.Interval('-1d')
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
218 for issue in (
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
219 {'title': 'ts1', 'status': '2', 'assignedto': '6',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
220 'priority': '3', 'messages' : [u_m ['6']], 'nosy' : ['4']},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
221 {'title': 'ts2', 'status': '1', 'assignedto': '6',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
222 'priority': '3', 'messages' : [u_m ['6']], 'nosy' : ['5']},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
223 {'title': 'ts4', 'status': '2', 'assignedto': '7',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
224 'priority': '3', 'messages' : [u_m ['7']]},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
225 {'title': 'ts5', 'status': '1', 'assignedto': '8',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
226 'priority': '3', 'messages' : [u_m ['8']]},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
227 {'title': 'ts6', 'status': '2', 'assignedto': '9',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
228 'priority': '3', 'messages' : [u_m ['9']]},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
229 {'title': 'ts7', 'status': '1', 'assignedto': '10',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
230 'priority': '3', 'messages' : [u_m ['10']]},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
231 {'title': 'ts8', 'status': '2', 'assignedto': '10',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
232 'priority': '3', 'messages' : [u_m ['10']], 'foo' : i},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
233 {'title': 'ts9', 'status': '1', 'assignedto': '10',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
234 'priority': '3', 'messages' : [u_m ['10'], u_m ['9']]}):
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
235 self.db.issue.create(**issue)
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
236 return self.iterSetup(classname)
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
237
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
238
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
239 class DBTest(commonDBTest):
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
240
6431
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
241 @pytest.fixture(autouse=True)
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
242 def inject_fixtures(self, caplog):
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
243 self._caplog = caplog
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
244
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
245 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
246 self.db.refresh_database()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
247
6433
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
248
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
249 def testUpgrade_5_to_6(self):
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
250
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
251 if(self.db.dbtype in ['anydbm', 'memorydb']):
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
252 self.skipTest('No schema upgrade needed on non rdbms backends')
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
253
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
254 # load the database
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
255 self.db.issue.create(title="flebble frooz")
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
256 self.db.commit()
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
257
6604
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
258 if self.db.database_schema['version'] > 6:
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
259 # make testUpgrades run the downgrade code only.
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
260 if hasattr(self, "downgrade_only"):
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
261 # we are being called by an earlier test
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
262 self.testUpgrade_6_to_7()
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
263 self.assertEqual(self.db.database_schema['version'], 6)
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
264 else:
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
265 # we are being called directly
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
266 self.downgrade_only = True
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
267 self.testUpgrade_6_to_7()
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
268 self.assertEqual(self.db.database_schema['version'], 6)
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
269 del(self.downgrade_only)
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
270 elif self.db.database_schema['version'] != 6:
6588
91ab3e0ffcd0 Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents: 6434
diff changeset
271 self.skipTest("This test only runs for database version 6")
91ab3e0ffcd0 Summary: Add test cases for sqlite fts
John Rouillard <rouilj@ieee.org>
parents: 6434
diff changeset
272
6433
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
273 if self.db.dbtype == 'mysql':
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
274 # version 6 has 5 indexes
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
275 self.db.sql('show indexes from _user;')
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
276 self.assertEqual(5,len(self.db.cursor.fetchall()),
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
277 "Database created with wrong number of indexes")
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
278
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
279 self.drop_key_retired_idx()
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
280
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
281 # after dropping (key.__retired__) composite index we have
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
282 # 3 index entries
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
283 self.db.sql('show indexes from _user;')
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
284 self.assertEqual(3,len(self.db.cursor.fetchall()))
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
285
6604
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
286 self.db.database_schema['version'] = 5
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
287
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
288 if hasattr(self, "downgrade_only"):
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
289 return
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
290
6433
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
291 # test upgrade adding index
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
292 self.db.post_init()
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
293
7206
521d98231e5c Test self.db.db_version_updated in schema upgrade paths
John Rouillard <rouilj@ieee.org>
parents: 7170
diff changeset
294 self.assertEqual(self.db.db_version_updated, True)
521d98231e5c Test self.db.db_version_updated in schema upgrade paths
John Rouillard <rouilj@ieee.org>
parents: 7170
diff changeset
295
6433
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
296 # they're back
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
297 self.db.sql('show indexes from _user;')
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
298 self.assertEqual(5,len(self.db.cursor.fetchall()))
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
299
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
300 # test a database already upgraded from 4 to 5
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
301 # so it has the index to enforce key uniqueness
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
302 self.db.database_schema['version'] = 5
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
303 self.db.post_init()
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
304
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
305 # they're still here.
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
306 self.db.sql('show indexes from _user;')
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
307 self.assertEqual(5,len(self.db.cursor.fetchall()))
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
308 else:
6604
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
309 if hasattr(self, "downgrade_only"):
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
310 return
6433
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
311 # this should be a no-op
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
312 # test upgrade
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
313 self.db.post_init()
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
314
6604
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
315 # we should be at the current db version
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
316 self.assertEqual(self.db.database_schema['version'],
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
317 self.db.current_db_version)
0d99ae7c8de6 Allow Roundup to use PostgreSQL database native full text search
John Rouillard <rouilj@ieee.org>
parents: 6588
diff changeset
318
6433
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
319 def drop_key_retired_idx(self):
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
320 c = self.db.cursor
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
321 for cn, klass in self.db.classes.items():
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
322 if klass.key:
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
323 sql = '''drop index _%s_key_retired_idx on _%s''' % (cn, cn)
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
324 self.db.sql(sql)
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
325
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
326 #
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
327 # automatic properties (well, the two easy ones anyway)
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
328 #
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
329 def testCreatorProperty(self):
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
330 i = self.db.issue
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
331 id1 = i.create(title='spam')
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
332 self.db.journaltag = 'fred'
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
333 id2 = i.create(title='spam')
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
334 self.assertNotEqual(id1, id2)
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
335 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
336
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
337 def testActorProperty(self):
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
338 i = self.db.issue
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
339 id1 = i.create(title='spam')
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
340 self.db.journaltag = 'fred'
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
341 i.set(id1, title='asfasd')
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
342 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
343
2098
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
344 # ID number controls
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
345 def testIDGeneration(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
346 id1 = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
347 id2 = self.db.issue.create(title="eggs", status='2')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
348 self.assertNotEqual(id1, id2)
2098
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
349 def testIDSetting(self):
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
350 # XXX numeric ids
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
351 self.db.setid('issue', 10)
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
352 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
353 self.assertEqual('11', id2)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
354
2098
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
355 #
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
356 # basic operations
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
357 #
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
358 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
359 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
360 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
361
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
362 # String
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
363 def testStringChange(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
364 for commit in (0,1):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
365 # test set & retrieve
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
366 nid = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
367 self.assertEqual(self.db.issue.get(nid, 'title'), 'spam')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
368
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
369 # change and make sure we retrieve the correct value
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
370 self.db.issue.set(nid, title='eggs')
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, 'title'), 'eggs')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
373
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
374 def testStringUnset(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
375 for commit in (0,1):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
376 nid = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
377 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
378 self.assertEqual(self.db.issue.get(nid, 'title'), 'spam')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
379 # make sure we can unset
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
380 self.db.issue.set(nid, title=None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
381 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
382 self.assertEqual(self.db.issue.get(nid, "title"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
383
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
384 # FileClass "content" property (no unset test)
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
385 def testFileClassContentChange(self):
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
386 for commit in (0,1):
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
387 # test set & retrieve
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
388 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
389 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
390
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
391 # 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
392 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
393 if commit: self.db.commit()
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
394 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
395
3752
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
396 def testStringUnicode(self):
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
397 # test set & retrieve
5468
0cde8a595893 fix tests for Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5395
diff changeset
398 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
399 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
400 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
401
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
402 # 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
403 ustr2 = u2s(u'change \u20ac change')
3752
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
404 self.db.issue.set(nid, title=ustr2)
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
405 self.db.commit()
c92687dce135 unicode / sqlite 3 problem [SF#1589292]
Richard Jones <richard@users.sourceforge.net>
parents: 3751
diff changeset
406 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
407
5492
6b0c542642be blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5488
diff changeset
408 # test set & retrieve (this time for file contents)
6b0c542642be blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5488
diff changeset
409 nid = self.db.file.create(content=ustr)
6b0c542642be blobfiles now always stores/returns bytes
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5488
diff changeset
410 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
411 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
412
5725
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
413 def testStringBinary(self):
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
414 ''' 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
415 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
416 trigger and handle UnicodeDecodeError
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
417 and get valid output
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
418 '''
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
419 # test set & retrieve
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
420 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
421
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
422 # test set & retrieve (this time for file contents)
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
423 # Since it has null in it, set it to a binary mime type
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
424 # so indexer's don't try to index it.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
425 nid = self.db.file.create(content=bstr,
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
426 type="application/octet-stream")
5725
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
427 print(nid)
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
428 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
429 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
430 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
431
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
432 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
433 # python 3
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
434 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
435 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
436 bstr)
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
437 else:
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
438 # python 2
6923225fd781 Handle UnicodeDecodeError in file class when file contents are not
John Rouillard <rouilj@ieee.org>
parents: 5719
diff changeset
439 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
440 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
441
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
442 # Link
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
443 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
444 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
445 status='100')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
446 for commit in (0,1):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
447 nid = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
448 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
449 self.assertEqual(self.db.issue.get(nid, "status"), '1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
450 self.db.issue.set(nid, status='2')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
451 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
452 self.assertEqual(self.db.issue.get(nid, "status"), '2')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
453
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
454 def testLinkUnset(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
455 for commit in (0,1):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
456 nid = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
457 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
458 self.db.issue.set(nid, status=None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
459 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
460 self.assertEqual(self.db.issue.get(nid, "status"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
461
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
462 # Multilink
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
463 def testMultilinkChange(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
464 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
465 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
466 nosy=['foo%s'%commit])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
467 u1 = self.db.user.create(username='foo%s'%commit)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
468 u2 = self.db.user.create(username='bar%s'%commit)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
469 nid = self.db.issue.create(title="spam", nosy=[u1])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
470 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
471 self.assertEqual(self.db.issue.get(nid, "nosy"), [u1])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
472 self.db.issue.set(nid, nosy=[])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
473 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
474 self.assertEqual(self.db.issue.get(nid, "nosy"), [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
475 self.db.issue.set(nid, nosy=[u1,u2])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
476 if commit: self.db.commit()
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
477 l = [u1,u2]; l.sort()
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
478 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
479 self.assertEqual(l, m)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
480
3872
34128a809e22 Allow multilinks to take None (treated as an empty list).
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3870
diff changeset
481 # 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
482 # 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
483 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
484 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
485 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
486
4490
559d9a2a0191 Fixed bug in filter_iter refactoring (lazy multilinks)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4480
diff changeset
487 def testMakeSeveralMultilinkedNodes(self):
559d9a2a0191 Fixed bug in filter_iter refactoring (lazy multilinks)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4480
diff changeset
488 for commit in (0,1):
559d9a2a0191 Fixed bug in filter_iter refactoring (lazy multilinks)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4480
diff changeset
489 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
490 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
491 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
492 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
493 if commit: self.db.commit()
559d9a2a0191 Fixed bug in filter_iter refactoring (lazy multilinks)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4480
diff changeset
494 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
495 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
496 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
497 if commit: self.db.commit()
559d9a2a0191 Fixed bug in filter_iter refactoring (lazy multilinks)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4480
diff changeset
498 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
499 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
500 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
501 if commit: self.db.commit()
559d9a2a0191 Fixed bug in filter_iter refactoring (lazy multilinks)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4480
diff changeset
502 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
503
3869
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
504 def testMultilinkChangeIterable(self):
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
505 for commit in (0,1):
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
506 # invalid nosy value assertion
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
507 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
508 nosy=['foo%s'%commit])
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
509 # invalid type for nosy create
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
510 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
511 nosy=1)
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
512 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
513 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
514 # 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
515 # 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
516 # 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
517 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
518 if commit: self.db.commit()
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
519 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
520 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
521 nosy='invalid type')
3870
f0eb93f25d1c make comments more readable per alexander's suggestion
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3869
diff changeset
522 # test with a tuple
f0eb93f25d1c make comments more readable per alexander's suggestion
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3869
diff changeset
523 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
524 if commit: self.db.commit()
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
525 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
526 # 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
527 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
528 if commit: self.db.commit()
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
529 l = [u1,u2]; l.sort()
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
530 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
531 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
532
3869
16faac822fe5 Allow Multilinks to take any iterable
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3844
diff changeset
533
2906
a8808157f892 fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents: 2899
diff changeset
534 # XXX one day, maybe...
6351
0db59cc2cd37 Enable testMultilinkOrdering check. Fix back_anydbm to pass.
John Rouillard <rouilj@ieee.org>
parents: 6332
diff changeset
535 def testMultilinkOrdering(self):
0db59cc2cd37 Enable testMultilinkOrdering check. Fix back_anydbm to pass.
John Rouillard <rouilj@ieee.org>
parents: 6332
diff changeset
536 for i in range(10):
0db59cc2cd37 Enable testMultilinkOrdering check. Fix back_anydbm to pass.
John Rouillard <rouilj@ieee.org>
parents: 6332
diff changeset
537 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
538 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
539 self.db.commit()
0db59cc2cd37 Enable testMultilinkOrdering check. Fix back_anydbm to pass.
John Rouillard <rouilj@ieee.org>
parents: 6332
diff changeset
540 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
541 # 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
542 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
543
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
544 # Date
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
545 def testDateChange(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', deadline=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, deadline=1)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
551 a = self.db.issue.get(nid, "deadline")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
552 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
553 self.db.issue.set(nid, deadline=date.Date())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
554 b = self.db.issue.get(nid, "deadline")
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(a, b)
3457
88f0a5030404 Fix invalid date spec in db tests
Richard Jones <richard@users.sourceforge.net>
parents: 3247
diff changeset
557 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
558 # 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
559 # internally for storing NULL. The others would, too
2a60b68985db Fix arbitrary limit on dates.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3752
diff changeset
560 # 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
561 # 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
562 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
563 self.db.issue.set(nid, deadline=d)
2a60b68985db Fix arbitrary limit on dates.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3752
diff changeset
564 if commit: self.db.commit()
2a60b68985db Fix arbitrary limit on dates.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3752
diff changeset
565 c = self.db.issue.get(nid, "deadline")
2a60b68985db Fix arbitrary limit on dates.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3752
diff changeset
566 self.assertEqual(c, d)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
567
3973
85cbaa50eba1 xml-rpc security checks and tests across all backends [SF#1907211]
Richard Jones <richard@users.sourceforge.net>
parents: 3963
diff changeset
568 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
569 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
570 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
571 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
572 '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
573 self.assertEqual(self.db.issue.filter(None,
3995
6bd3df4356b1 improved test case
Richard Jones <richard@users.sourceforge.net>
parents: 3973
diff changeset
574 {'deadline': '2008-02-29'}), [nid])
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
575 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
576 {'deadline': '2008-02-29'})), [nid])
3995
6bd3df4356b1 improved test case
Richard Jones <richard@users.sourceforge.net>
parents: 3973
diff changeset
577 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
578 self.assertEqual(str(self.db.issue.get(nid, 'deadline')),
3995
6bd3df4356b1 improved test case
Richard Jones <richard@users.sourceforge.net>
parents: 3973
diff changeset
579 '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
580 self.assertEqual(self.db.issue.filter(None,
3995
6bd3df4356b1 improved test case
Richard Jones <richard@users.sourceforge.net>
parents: 3973
diff changeset
581 {'deadline': '2008-02-29'}), [])
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
582 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
583 {'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
584
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
585 def testDateUnset(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
586 for commit in (0,1):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
587 nid = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
588 self.db.issue.set(nid, deadline=date.Date())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
589 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
590 self.assertNotEqual(self.db.issue.get(nid, "deadline"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
591 self.db.issue.set(nid, deadline=None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
592 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
593 self.assertEqual(self.db.issue.get(nid, "deadline"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
594
4885
e56047711df2 Add date sort test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
595 def testDateSort(self):
e56047711df2 Add date sort test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
596 d1 = date.Date('.')
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
597 ae, iiter = self.filteringSetup()
4885
e56047711df2 Add date sort test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
598 nid = self.db.issue.create(title="nodeadline", status='1')
e56047711df2 Add date sort test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
599 self.db.commit()
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
600 for filt in iiter():
4885
e56047711df2 Add date sort test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
601 ae(filt(None, {}, ('+','deadline')), ['5', '2', '1', '3', '4'])
e56047711df2 Add date sort test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
602 ae(filt(None, {}, ('+','id'), ('+', 'deadline')),
e56047711df2 Add date sort test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
603 ['5', '2', '1', '3', '4'])
e56047711df2 Add date sort test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
604 ae(filt(None, {}, ('-','id'), ('-', 'deadline')),
e56047711df2 Add date sort test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
605 ['4', '3', '1', '2', '5'])
e56047711df2 Add date sort test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
606
4886
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
607 def testDateSortMultilink(self):
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
608 d1 = date.Date('.')
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
609 ae, iiter = self.filteringSetup()
4886
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
610 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
611 self.db.commit()
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
612 ae(sorted(self.db.issue.get('1','nosy')), [])
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
613 ae(sorted(self.db.issue.get('2','nosy')), [])
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
614 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
615 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
616 ae(sorted(self.db.issue.get('5','nosy')), [])
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
617 ae(self.db.user.get('1','username'), 'admin')
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
618 ae(self.db.user.get('2','username'), 'fred')
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
619 ae(self.db.user.get('3','username'), 'bleep')
a116de39e38c Fix sort-representation for RDBMS backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4885
diff changeset
620 # 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
621 # so testing only filter
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
622 for f in iiter():
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
623 if f.__name__ != 'filter':
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
624 continue
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
625 ae(f(None, {}, ('+', 'id'), ('+','nosy')),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
626 ['1', '2', '5', '4', '3'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
627 ae(f(None, {}, ('+','deadline'), ('+', 'nosy')),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
628 ['5', '2', '1', '4', '3'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
629 ae(f(None, {}, ('+','nosy'), ('+', 'deadline')),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
630 ['5', '2', '1', '3', '4'])
4885
e56047711df2 Add date sort test
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4879
diff changeset
631
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
632 # Interval
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
633 def testIntervalChange(self):
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
634 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
635 title='spam', foo=1)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
636 for commit in (0,1):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
637 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
638 self.assertRaises(TypeError, self.db.issue.set, nid, foo=1)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
639 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
640 a = self.db.issue.get(nid, "foo")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
641 i = date.Interval('-1d')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
642 self.db.issue.set(nid, foo=i)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
643 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
644 self.assertNotEqual(self.db.issue.get(nid, "foo"), a)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
645 self.assertEqual(i, self.db.issue.get(nid, "foo"))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
646 j = date.Interval('1y')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
647 self.db.issue.set(nid, foo=j)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
648 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
649 self.assertNotEqual(self.db.issue.get(nid, "foo"), i)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
650 self.assertEqual(j, self.db.issue.get(nid, "foo"))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
651
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
652 def testIntervalUnset(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
653 for commit in (0,1):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
654 nid = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
655 self.db.issue.set(nid, foo=date.Interval('-1d'))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
656 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
657 self.assertNotEqual(self.db.issue.get(nid, "foo"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
658 self.db.issue.set(nid, foo=None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
659 if commit: self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
660 self.assertEqual(self.db.issue.get(nid, "foo"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
661
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
662 # Boolean
2472
f41539b3c486 fixed Boolean values in postgresql (bugs [SF#972546] and [SF#972600])
Richard Jones <richard@users.sourceforge.net>
parents: 2453
diff changeset
663 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
664 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
665 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
666 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
667 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
668
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
669 def testBooleanChange(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
670 userid = self.db.user.create(username='foo', assignable=1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
671 self.assertEqual(1, self.db.user.get(userid, 'assignable'))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
672 self.db.user.set(userid, assignable=0)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
673 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
674 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
675 self.assertEqual(self.db.user.get(userid, 'assignable'), 1)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
676
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
677 def testBooleanUnset(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
678 nid = self.db.user.create(username='foo', assignable=1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
679 self.db.user.set(nid, assignable=None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
680 self.assertEqual(self.db.user.get(nid, "assignable"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
681
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
682 # Number
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
683 def testNumberChange(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
684 nid = self.db.user.create(username='foo', age=1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
685 self.assertEqual(1, self.db.user.get(nid, 'age'))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
686 self.db.user.set(nid, age=3)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
687 self.assertNotEqual(self.db.user.get(nid, 'age'), 1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
688 self.db.user.set(nid, age=1.0)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
689 self.assertEqual(self.db.user.get(nid, 'age'), 1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
690 self.db.user.set(nid, age=0)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
691 self.assertEqual(self.db.user.get(nid, 'age'), 0)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
692
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
693 nid = self.db.user.create(username='bar', age=0)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
694 self.assertEqual(self.db.user.get(nid, 'age'), 0)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
695
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
696 def testNumberUnset(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
697 nid = self.db.user.create(username='foo', age=1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
698 self.db.user.set(nid, age=None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
699 self.assertEqual(self.db.user.get(nid, "age"), None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
700
5175
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
701 # Long number
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
702 def testDoubleChange(self):
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
703 lnl = 100.12345678
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
704 ln = 100.123456789
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
705 lng = 100.12345679
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
706 nid = self.db.user.create(username='foo', longnumber=ln)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
707 self.assertEqual(self.db.user.get(nid, 'longnumber') < lng, True)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
708 self.assertEqual(self.db.user.get(nid, 'longnumber') > lnl, True)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
709 lnl = 1.0012345678e55
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
710 ln = 1.00123456789e55
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
711 lng = 1.0012345679e55
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
712 self.db.user.set(nid, longnumber=ln)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
713 self.assertEqual(self.db.user.get(nid, 'longnumber') < lng, True)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
714 self.assertEqual(self.db.user.get(nid, 'longnumber') > lnl, True)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
715 self.db.user.set(nid, longnumber=-1)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
716 self.assertEqual(self.db.user.get(nid, 'longnumber'), -1)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
717 self.db.user.set(nid, longnumber=0)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
718 self.assertEqual(self.db.user.get(nid, 'longnumber'), 0)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
719
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
720 nid = self.db.user.create(username='bar', longnumber=0)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
721 self.assertEqual(self.db.user.get(nid, 'longnumber'), 0)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
722
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
723 def testDoubleUnset(self):
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
724 nid = self.db.user.create(username='foo', longnumber=1.2345)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
725 self.db.user.set(nid, longnumber=None)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
726 self.assertEqual(self.db.user.get(nid, "longnumber"), None)
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
727
e1e40674a0bc Implement double-precision Number
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5163
diff changeset
728
5067
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
729 # Integer
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
730 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
731 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
732 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
733 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
734 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
735 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
736 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
737 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
738 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
739
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
740 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
741 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
742
e424987d294a Add support for an integer type to join the existing number type.
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
743 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
744 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
745 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
746 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
747
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
748 # 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
749 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
750 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
751 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
752 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
753 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
754 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
755 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
756 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
757 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
758 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
759 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
760
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
761 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
762 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
763 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
764 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
765 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
766
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
767 # key value
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
768 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
769 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
770
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
771 newid = self.db.user.create(username="spam")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
772 self.assertEqual(self.db.user.lookup('spam'), newid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
773 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
774 self.assertEqual(self.db.user.lookup('spam'), newid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
775 self.db.user.retire(newid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
776 self.assertRaises(KeyError, self.db.user.lookup, 'spam')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
777
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
778 # use the key again now that the old is retired
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
779 newid2 = self.db.user.create(username="spam")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
780 self.assertNotEqual(newid, newid2)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
781 # try to restore old node. this shouldn't succeed!
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
782 self.assertRaises(KeyError, self.db.user.restore, newid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
783
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
784 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
785
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
786 # 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
787 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
788 # 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
789 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
790 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
791 # 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
792 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
793 # 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
794 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
795 # 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
796 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
797
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
798 # retirement
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
799 def testRetire(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
800 self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
801 b = self.db.status.get('1', 'name')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
802 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
803 nodeids = self.db.status.getnodeids()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
804 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
805 others = nodeids[:]
34ada15b9936 all backends implement the retired check in getnodeids [SF#1290560]
Richard Jones <richard@users.sourceforge.net>
parents: 3457
diff changeset
806 others.remove('1')
34ada15b9936 all backends implement the retired check in getnodeids [SF#1290560]
Richard Jones <richard@users.sourceforge.net>
parents: 3457
diff changeset
807
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
808 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
809 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
810 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
811 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
812 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
813 set(others))
3486
34ada15b9936 all backends implement the retired check in getnodeids [SF#1290560]
Richard Jones <richard@users.sourceforge.net>
parents: 3457
diff changeset
814
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
815 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
816
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
817 # make sure the list is different
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
818 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
819
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
820 # can still access the node if necessary
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
821 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
822 self.assertRaises(IndexError, self.db.status.set, '1', name='hello')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
823 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
824 self.assertTrue(self.db.status.is_retired('1'))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
825 self.assertEqual(self.db.status.get('1', 'name'), b)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
826 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
827
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
828 # try to restore retired node
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
829 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
830
5649
f8893e1cde0d assert_ is depricated. Replacing with assertTrue to reduce logs in travisci.
John Rouillard <rouilj@ieee.org>
parents: 5494
diff changeset
831 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
832
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
833 def testCacheCreateSet(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
834 self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
835 a = self.db.issue.get('1', 'title')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
836 self.assertEqual(a, 'spam')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
837 self.db.issue.set('1', title='ham')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
838 b = self.db.issue.get('1', 'title')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
839 self.assertEqual(b, 'ham')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
840
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
841 def testSerialisation(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
842 nid = self.db.issue.create(title="spam", status='1',
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
843 deadline=date.Date(), foo=date.Interval('-1d'))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
844 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
845 assert isinstance(self.db.issue.get(nid, 'deadline'), date.Date)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
846 assert isinstance(self.db.issue.get(nid, 'foo'), date.Interval)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
847 uid = self.db.user.create(username="fozzy",
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
848 password=password.Password('t. bear'))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
849 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
850 assert isinstance(self.db.user.get(uid, 'password'), password.Password)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
851
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
852 def testTransactions(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
853 # remember the number of items we started
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
854 num_issues = len(self.db.issue.list())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
855 num_files = self.db.numfiles()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
856 self.db.issue.create(title="don't commit me!", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
857 self.assertNotEqual(num_issues, len(self.db.issue.list()))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
858 self.db.rollback()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
859 self.assertEqual(num_issues, len(self.db.issue.list()))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
860 self.db.issue.create(title="please commit me!", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
861 self.assertNotEqual(num_issues, len(self.db.issue.list()))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
862 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
863 self.assertNotEqual(num_issues, len(self.db.issue.list()))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
864 self.db.rollback()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
865 self.assertNotEqual(num_issues, len(self.db.issue.list()))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
866 self.db.file.create(name="test", type="text/plain", content="hi")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
867 self.db.rollback()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
868 self.assertEqual(num_files, self.db.numfiles())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
869 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
870 self.db.file.create(name="test", type="text/plain",
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
871 content="hi %d"%(i))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
872 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
873 num_files2 = self.db.numfiles()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
874 self.assertNotEqual(num_files, num_files2)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
875 self.db.file.create(name="test", type="text/plain", content="hi")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
876 self.db.rollback()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
877 self.assertNotEqual(num_files, self.db.numfiles())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
878 self.assertEqual(num_files2, self.db.numfiles())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
879
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
880 # rollback / cache interaction
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
881 name1 = self.db.user.get('1', 'username')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
882 self.db.user.set('1', username = name1+name1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
883 # 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
884 self.db.user.get('1', 'username')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
885 self.db.rollback()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
886 name2 = self.db.user.get('1', 'username')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
887 self.assertEqual(name1, name2)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
888
3906
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
889 def testDestroyBlob(self):
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
890 # destroy an uncommitted blob
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
891 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
892 self.db.commit()
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
893 fn = self.db.filename('file', f1)
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
894 self.db.file.destroy(f1)
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
895 self.db.commit()
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
896 self.assertEqual(os.path.exists(fn), False)
666b70676ec6 destroy blobfiles if they exist
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3882
diff changeset
897
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
898 def testDestroyNoJournalling(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
899 self.innerTestDestroy(klass=self.db.session)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
900
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
901 def testDestroyJournalling(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
902 self.innerTestDestroy(klass=self.db.issue)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
903
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
904 def innerTestDestroy(self, klass):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
905 newid = klass.create(title='Mr Friendly')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
906 n = len(klass.list())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
907 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
908 count = klass.count()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
909 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
910 self.assertNotEqual(count, klass.count())
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
911 self.assertRaises(IndexError, klass.get, newid, 'title')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
912 self.assertNotEqual(len(klass.list()), n)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
913 if klass.do_journal:
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
914 self.assertRaises(IndexError, klass.history, newid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
915
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
916 # now with a commit
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
917 newid = klass.create(title='Mr Friendly')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
918 n = len(klass.list())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
919 self.assertEqual(klass.get(newid, 'title'), 'Mr Friendly')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
920 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
921 count = klass.count()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
922 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
923 self.assertNotEqual(count, klass.count())
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
924 self.assertRaises(IndexError, klass.get, newid, 'title')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
925 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
926 self.assertRaises(IndexError, klass.get, newid, 'title')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
927 self.assertNotEqual(len(klass.list()), n)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
928 if klass.do_journal:
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
929 self.assertRaises(IndexError, klass.history, newid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
930
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
931 # now with a rollback
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
932 newid = klass.create(title='Mr Friendly')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
933 n = len(klass.list())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
934 self.assertEqual(klass.get(newid, 'title'), 'Mr Friendly')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
935 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
936 count = klass.count()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
937 klass.destroy(newid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
938 self.assertNotEqual(len(klass.list()), n)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
939 self.assertRaises(IndexError, klass.get, newid, 'title')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
940 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
941 self.assertEqual(count, klass.count())
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
942 self.assertEqual(klass.get(newid, 'title'), 'Mr Friendly')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
943 self.assertEqual(len(klass.list()), n)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
944 if klass.do_journal:
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
945 self.assertNotEqual(klass.history(newid), [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
946
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
947 def testExceptions(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
948 # this tests the exceptions that should be raised
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
949 ar = self.assertRaises
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
950
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
951 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
952
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
953 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
954 # class create
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
955 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
956 # string property
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
957 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
958 # 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
959 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
960 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
961 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
962 ar(KeyError, self.db.status.create, activity=1)
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
963 ar(KeyError, self.db.status.create, actor=1)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
964 # invalid property name
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
965 ar(KeyError, self.db.status.create, foo='foo')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
966 # key name clash
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
967 ar(ValueError, self.db.status.create, name='unread')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
968 # invalid link index
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
969 ar(IndexError, self.db.issue.create, title='foo', status='bar')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
970 # invalid link value
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
971 ar(ValueError, self.db.issue.create, title='foo', status=1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
972 # invalid multilink type
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
973 ar(TypeError, self.db.issue.create, title='foo', status='1',
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
974 nosy='hello')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
975 # invalid multilink index type
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
976 ar(ValueError, self.db.issue.create, title='foo', status='1',
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
977 nosy=[1])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
978 # invalid multilink index
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
979 ar(IndexError, self.db.issue.create, title='foo', status='1',
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
980 nosy=['10'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
981
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
982 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
983 # key property
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
984 #
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
985 # key must be a String
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
986 ar(TypeError, self.db.file.setkey, 'fooz')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
987 # key must exist
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
988 ar(KeyError, self.db.file.setkey, 'fubar')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
989
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
990 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
991 # class get
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
992 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
993 # invalid node id
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
994 ar(IndexError, self.db.issue.get, '99', 'title')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
995 # invalid property name
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
996 ar(KeyError, self.db.status.get, '2', 'foo')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
997
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
998 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
999 # class set
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1000 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1001 # invalid node id
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1002 ar(IndexError, self.db.issue.set, '99', title='foo')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1003 # invalid property name
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1004 ar(KeyError, self.db.status.set, '1', foo='foo')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1005 # string property
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1006 ar(TypeError, self.db.status.set, '1', name=1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1007 # key name clash
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1008 ar(ValueError, self.db.status.set, '2', name='unread')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1009 # set up a valid issue for me to work on
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1010 id = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1011 # invalid link index
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1012 ar(IndexError, self.db.issue.set, id, title='foo', status='bar')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1013 # invalid link value
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1014 ar(ValueError, self.db.issue.set, id, title='foo', status=1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1015 # invalid multilink type
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1016 ar(TypeError, self.db.issue.set, id, title='foo', status='1',
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1017 nosy='hello')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1018 # invalid multilink index type
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1019 ar(ValueError, self.db.issue.set, id, title='foo', status='1',
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1020 nosy=[1])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1021 # invalid multilink index
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1022 ar(IndexError, self.db.issue.set, id, title='foo', status='1',
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1023 nosy=['10'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1024 # NOTE: the following increment the username to avoid problems
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1025 # within metakit's backend (it creates the node, and then sets the
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1026 # 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
1027 # before the age/assignable/etc. set, which raises the exception)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1028 # invalid number value
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1029 ar(TypeError, self.db.user.create, username='foo', age='a')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1030 # invalid boolean value
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1031 ar(TypeError, self.db.user.create, username='foo2', assignable='true')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1032 nid = self.db.user.create(username='foo3')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1033 # invalid number value
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1034 ar(TypeError, self.db.user.set, nid, age='a')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1035 # invalid boolean value
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1036 ar(TypeError, self.db.user.set, nid, assignable='true')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1037
3743
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1038 def testAuditors(self):
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1039 class test:
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1040 called = False
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1041 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
1042 create = test()
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1043
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1044 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
1045 self.db.user.create(username="mary")
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1046 self.assertEqual(create.called, True)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1047
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1048 set = test()
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1049 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
1050 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
1051 self.assertEqual(set.called, True)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1052
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1053 retire = test()
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1054 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
1055 self.db.user.retire('1')
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1056 self.assertEqual(retire.called, True)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1057
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1058 def testAuditorTwo(self):
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1059 class test:
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1060 n = 0
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1061 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
1062 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
1063 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
1064 test = test()
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1065 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
1066 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
1067 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
1068 self.db.user.create(username="mary")
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1069 self.assertEqual(test.call_a, 0)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1070 self.assertEqual(test.call_b, 1)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1071 self.assertEqual(test.call_c, 2)
e754cc14e76a fix unstable ordering of detectors [SF#1585378]
Richard Jones <richard@users.sourceforge.net>
parents: 3692
diff changeset
1072
5112
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1073 def testDefault_Value(self):
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1074 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
1075
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1076 # 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
1077 # 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
1078 # db on creation.
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1079 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
1080 # 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
1081 # match the Interval test below.
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1082 self.assertEqual(result, None)
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1083
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1084 # 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
1085 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
1086 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
1087
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1088 def testQuietProperty(self):
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1089 # 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
1090 # 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
1091 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
1092 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
1093 # 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
1094 # 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
1095 # 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
1096 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
1097 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
1098 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
1099 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
1100 self.assertEqual(result, 20)
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1101
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1102 # 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
1103 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
1104 assignedto="2", nosy=["3", "2"])
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1105 self.assertEqual(result, {'title': 'title2'})
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1106
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1107 # 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
1108 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
1109 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
1110 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
1111 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
1112
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1113 def testQuietChangenote(self):
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1114 # 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
1115 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
1116
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1117 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
1118
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1119 # 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
1120 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
1121 assignedto="2", nosy=["3", "2"])
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1122 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
1123 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
1124
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1125 # 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
1126 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
1127 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
1128 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
1129 assignedto="2", nosy=["1", "2"])
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1130 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
1131 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
1132 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
1133 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
1134
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1135 def testViewPremJournal(self):
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1136 pass
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1137
5112
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1138 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
1139 ## 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
1140 ## 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
1141 ## 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
1142 ## Uncomment below 2 lines:
5263
f015df5f8edf Also comment out testfixture used to capture debug logging.
John Rouillard <rouilj@ieee.org>
parents: 5262
diff changeset
1143 #import logging
f015df5f8edf Also comment out testfixture used to capture debug logging.
John Rouillard <rouilj@ieee.org>
parents: 5262
diff changeset
1144 #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
1145 ## 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
1146 #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
1147 # 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
1148 #print l
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1149 ## 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
1150 ## 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
1151 ## 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
1152
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1153 # 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
1154 # 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
1155 # 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
1156
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1157 # 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
1158 # 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
1159 # 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
1160 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
1161 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
1162
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1163 # 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
1164 # 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
1165 # 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
1166 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
1167 supervisor='1', assignable=True,
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1168 password=password.Password("3456"),
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1169 rating=4, realname="newname")
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1170 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
1171 '''
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1172 [('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
1173 ('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
1174 {'username': 'pete', 'assignable': False,
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1175 'supervisor': None, 'realname': None, 'rating': None,
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1176 'age': 10, 'password': None})]
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1177 '''
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1178 expected = {'username': 'pete', 'assignable': False,
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1179 'supervisor': None, 'realname': None, 'rating': None,
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1180 'age': 10, 'password': None}
5112
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1181
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1182 result.sort()
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1183 (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
1184 # check piecewise ignoring date of transaction
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1185 self.assertEqual('3', id)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1186 self.assertEqual('1', user)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1187 self.assertEqual('set', action)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1188 self.assertEqual(expected, args)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1189
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1190 # change all quiet params on issue.
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1191 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
1192 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
1193 assignedto="2", nosy=["3", "2"])
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1194 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
1195 self.assertEqual(result, '\n----------\ntitle: title2')
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1196
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1197 # check history including quiet properties
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1198 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
1199 print(result)
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1200 ''' output should be like:
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1201 [ ... ('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
1202 {'assignedto': None, 'nosy': (('+', ['3', '2']),),
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1203 '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
1204 'title': 'title'})
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1205 '''
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1206 expected = {'assignedto': None,
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1207 'nosy': (('+', ['3', '2']),),
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1208 '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
1209 'title': 'title'}
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1210
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1211 result.sort()
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5330
diff changeset
1212 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
1213 (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
1214 # check piecewise ignoring date of transaction
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1215 self.assertEqual('1', id)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1216 self.assertEqual('1', user)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1217 self.assertEqual('set', action)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1218 self.assertEqual(expected, args)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1219
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1220 # check history removing quiet properties
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1221 result=self.db.issue.history(new_issue)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1222 ''' output should be like:
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1223 [ ... ('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
1224 {'title': 'title'})
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1225 '''
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1226 expected = {'title': 'title'}
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1227
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1228 result.sort()
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5330
diff changeset
1229 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
1230 (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
1231 # check piecewise
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1232 self.assertEqual('1', id)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1233 self.assertEqual('1', user)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1234 self.assertEqual('set', action)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1235 self.assertEqual(expected, args)
5112
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1236
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1237 # 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
1238 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
1239 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
1240
d8457c376a38 Work around for missing fractional second support in our use of mysql.
John Rouillard <rouilj@ieee.org>
parents: 5233
diff changeset
1241 # 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
1242 # 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
1243 # 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
1244 # 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
1245 # 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
1246 # 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
1247 # 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
1248 # 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
1249 import time; time.sleep(2)
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1250 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
1251 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
1252 assignedto="2", nosy=["1", "2"])
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1253 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
1254 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
1255
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1256
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1257 # check history removing the current quiet properties
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1258 result=self.db.issue.history(new_issue)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1259 expected = {'nosy': (('+', ['1']), ('-', ['3'])),
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1260 '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
1261
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1262 result.sort()
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5330
diff changeset
1263 print("result unquiet", result)
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1264 (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
1265 # check piecewise
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1266 self.assertEqual('1', id)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1267 self.assertEqual('1', user)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1268 self.assertEqual('set', action)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1269 self.assertEqual(expected, args)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1270
5261
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1271 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
1272 result.sort()
5261
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1273
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1274 # 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
1275 # [('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
1276 # ('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
1277 # ('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
1278
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1279 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
1280
b5400cae9c2a Make sure to sort the result otherwise anydbm and sql ordering is different.
John Rouillard <rouilj@ieee.org>
parents: 5261
diff changeset
1281 (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
1282
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1283 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
1284
53a853c06e9a Fixed quiet history filter for linked items. Test for same fixed.
John Rouillard <rouilj@ieee.org>
parents: 5248
diff changeset
1285 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
1286 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
1287 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
1288 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
1289
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1290 # reset quiet props
5112
8901cc4ef0e0 - issue1714899: Feature Request: Optional Change Note. Added a new
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1291 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
1292 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
1293
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1294 # Change the role for the new_user.
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1295 # 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
1296 # 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
1297 # 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
1298 # View permissons on role.
9886917c8545 Add more sleeps to work around mysql timestamp issue.
John Rouillard <rouilj@ieee.org>
parents: 5234
diff changeset
1299 # 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
1300 # 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
1301 time.sleep(2)
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1302 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
1303
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1304 # 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
1305 # from None
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1306 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
1307 result.sort()
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1308 ''' result should end like:
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1309 [ ...
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1310 ('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
1311 {'username': 'pete', 'assignable': False,
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1312 'supervisor': None, 'realname': None,
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1313 'rating': None, 'age': 10, 'password': None}),
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1314 ('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
1315 ('issue', '1', 'nosy')),
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1316 ('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
1317 ('issue', '1', 'nosy')),
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1318 ('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
1319 {'roles': None})]
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1320 '''
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1321 (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
1322 expected = {'roles': None }
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1323
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1324 self.assertEqual('3', id)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1325 self.assertEqual('1', user)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1326 self.assertEqual('set', action)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1327 self.assertEqual(expected, args)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1328
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1329 # 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
1330 # 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
1331 # 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
1332 # '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
1333 # one of them.
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1334 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
1335 # 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
1336 time.sleep(2)
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1337 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
1338 # make the user fred current.
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1339 self.db.setCurrentUser('fred')
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1340 self.assertEqual(self.db.getuid(), id)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1341
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1342 # check history as the user fred
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1343 # include quiet properties
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1344 # but require View perms
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1345 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
1346 result.sort()
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1347 ''' result should look like
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1348 [('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
1349 ('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
1350 {'username': 'pete', 'assignable': False,
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1351 'supervisor': None, 'age': 10})]
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1352 '''
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1353 # analyze last item
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1354 (id, tx_date, user, action, args) = result[-1]
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1355 expected= {'username': 'pete', 'assignable': False,
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1356 'supervisor': None}
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1357
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1358 self.assertEqual('3', id)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1359 self.assertEqual('1', user)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1360 self.assertEqual('set', action)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1361 self.assertEqual(expected, args)
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1362
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1363 # reset the user to admin
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1364 self.db.setCurrentUser('admin')
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5175
diff changeset
1365 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
1366
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1367 def testJournals(self):
2906
a8808157f892 fix some bugs introduced in refactoring of blobfiles filename()
Richard Jones <richard@users.sourceforge.net>
parents: 2899
diff changeset
1368 muid = self.db.user.create(username="mary")
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1369 self.db.user.create(username="pete")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1370 self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1371 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1372
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1373 # journal entry for issue create
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1374 journal = self.db.getjournal('issue', '1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1375 self.assertEqual(1, len(journal))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1376 (nodeid, date_stamp, journaltag, action, params) = journal[0]
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1377 self.assertEqual(nodeid, '1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1378 self.assertEqual(journaltag, self.db.user.lookup('admin'))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1379 self.assertEqual(action, 'create')
5395
23b8e6067f7c Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5390
diff changeset
1380 keys = sorted(params.keys())
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1381 self.assertEqual(keys, [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1382
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1383 # journal entry for link
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1384 journal = self.db.getjournal('user', '1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1385 self.assertEqual(1, len(journal))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1386 self.db.issue.set('1', assignedto='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1387 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1388 journal = self.db.getjournal('user', '1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1389 self.assertEqual(2, len(journal))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1390 (nodeid, date_stamp, journaltag, action, params) = journal[1]
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1391 self.assertEqual('1', nodeid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1392 self.assertEqual('1', journaltag)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1393 self.assertEqual('link', action)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1394 self.assertEqual(('issue', '1', 'assignedto'), params)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1395
2754
1f89984c0ea5 testJournals: if backend is too fast, two journal entries...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2753
diff changeset
1396 # 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
1397 time.sleep(0.01)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1398 # 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
1399 self.db.setCurrentUser('mary')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1400 self.db.issue.set('1', assignedto='2')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1401 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1402 journal = self.db.getjournal('user', '1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1403 self.assertEqual(3, len(journal))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1404 (nodeid, date_stamp, journaltag, action, params) = journal[2]
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1405 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
1406 self.assertEqual(muid, journaltag)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1407 self.assertEqual('unlink', action)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1408 self.assertEqual(('issue', '1', 'assignedto'), params)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1409
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1410 # test disabling journalling
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1411 # ... get the last entry
2098
18addf2a8596 Implemented proper datatypes in mysql and postgresql backends...
Richard Jones <richard@users.sourceforge.net>
parents: 2089
diff changeset
1412 jlen = len(self.db.getjournal('user', '1'))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1413 self.db.issue.disableJournalling()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1414 self.db.issue.set('1', title='hello world')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1415 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1416 # 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
1417 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
1418 jlen = len(self.db.getjournal('issue', '1'))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1419 self.db.issue.enableJournalling()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1420 self.db.issue.set('1', title='hello world 2')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1421 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1422 # 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
1423 self.assertNotEqual(jlen, len(self.db.getjournal('issue', '1')))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1424
5315
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1425 def testJournalNonexistingProperty(self):
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1426 # Test for non-existing properties, link/unlink events to
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1427 # 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
1428 # 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
1429 # 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
1430 self.db.user.create(username="mary", roles="User")
5315
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1431 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
1432 # 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
1433 # 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
1434 time.sleep(2)
5329
19e12a540b91 Add a valid journal entry to the testJournalNonexistingProperty tests
John Rouillard <rouilj@ieee.org>
parents: 5319
diff changeset
1435 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
1436 time.sleep(2)
5315
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1437 self.db.commit()
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1438 journal = self.db.getjournal('issue', id)
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1439 now = date.Date('.')
6968
4169f27f15f6 force time offset when loading journal
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1440 sec1 = date.Interval('0:00:01')
5315
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1441 sec2 = date.Interval('0:00:02')
6968
4169f27f15f6 force time offset when loading journal
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1442 sec3 = date.Interval('0:00:03')
5329
19e12a540b91 Add a valid journal entry to the testJournalNonexistingProperty tests
John Rouillard <rouilj@ieee.org>
parents: 5319
diff changeset
1443 jp0 = dict(title = 'spam')
5315
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1444 # Non-existing property changed
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1445 jp1 = dict(nonexisting = None)
6968
4169f27f15f6 force time offset when loading journal
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1446 journal.append ((id, now+sec1, '1', 'set', jp1))
5315
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1447 # Link from user-class to non-existing property
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1448 jp2 = ('user', '1', 'xyzzy')
6968
4169f27f15f6 force time offset when loading journal
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1449 journal.append ((id, now+sec2, '1', 'link', jp2))
5315
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1450 # Link from non-existing class
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1451 jp3 = ('frobozz', '1', 'xyzzy')
6968
4169f27f15f6 force time offset when loading journal
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1452 journal.append ((id, now+sec3, '1', 'link', jp3))
5315
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1453 self.db.setjournal('issue', id, journal)
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1454 self.db.commit()
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1455 result=self.db.issue.history(id)
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1456 result.sort()
5317
c0cda00af479 Fix tests for memorydb and anydbm backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5315
diff changeset
1457 # anydbm drops unknown properties during serialisation
c0cda00af479 Fix tests for memorydb and anydbm backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5315
diff changeset
1458 if self.db.dbtype == 'anydbm':
c0cda00af479 Fix tests for memorydb and anydbm backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5315
diff changeset
1459 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
1460 self.assertEqual(result [1][4], jp0)
5317
c0cda00af479 Fix tests for memorydb and anydbm backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5315
diff changeset
1461 self.assertEqual(result [2][4], jp2)
c0cda00af479 Fix tests for memorydb and anydbm backends
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5315
diff changeset
1462 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
1463 else:
19e12a540b91 Add a valid journal entry to the testJournalNonexistingProperty tests
John Rouillard <rouilj@ieee.org>
parents: 5319
diff changeset
1464 self.assertEqual(len(result), 5)
19e12a540b91 Add a valid journal entry to the testJournalNonexistingProperty tests
John Rouillard <rouilj@ieee.org>
parents: 5319
diff changeset
1465 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
1466 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
1467 # 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
1468 # in python 3.5. Print result to debug.
6968
4169f27f15f6 force time offset when loading journal
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1469 # is system runs fast enough, timestamp can
4169f27f15f6 force time offset when loading journal
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1470 # be the same on two journal items. Ordering
4169f27f15f6 force time offset when loading journal
John Rouillard <rouilj@ieee.org>
parents: 6915
diff changeset
1471 # in that case is random.
5329
19e12a540b91 Add a valid journal entry to the testJournalNonexistingProperty tests
John Rouillard <rouilj@ieee.org>
parents: 5319
diff changeset
1472 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
1473 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
1474 self.assertEqual(result [4][4], jp3)
5315
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1475 self.db.close()
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1476 # 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
1477 self.open_database('mary')
7f00fc5958ca Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6351
diff changeset
1478 setupSchema(self.db, 0, self.module)
7f00fc5958ca Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6351
diff changeset
1479 # allow mary to see issue fields like title
7f00fc5958ca Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6351
diff changeset
1480 self.db.security.addPermissionToRole('User', 'View', 'issue')
7f00fc5958ca Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6351
diff changeset
1481 result=self.db.issue.history(id)
7f00fc5958ca Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6351
diff changeset
1482 self.assertEqual(len(result), 2)
7f00fc5958ca Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6351
diff changeset
1483 self.assertEqual(result [1][4], jp0)
5315
5a014410f254 Fix issue2550954: History display breaks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5311
diff changeset
1484
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1485 def testJournalPreCommit(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1486 id = self.db.user.create(username="mary")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1487 self.assertEqual(len(self.db.getjournal('user', id)), 1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1488 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1489
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1490 def testPack(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1491 id = self.db.issue.create(title="spam", status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1492 self.db.commit()
2255
4990fd3d57a7 fix mysql testing date granularity thingy
Richard Jones <richard@users.sourceforge.net>
parents: 2247
diff changeset
1493 time.sleep(1)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1494 self.db.issue.set(id, status='2')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1495 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1496
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1497 # 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
1498 time.sleep(1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1499 pack_before = date.Date('.')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1500
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1501 # wait another second and add one more entry
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1502 time.sleep(1)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1503 self.db.issue.set(id, status='3')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1504 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1505 jlen = len(self.db.getjournal('issue', id))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1506
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1507 # pack
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1508 self.db.pack(pack_before)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1509
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1510 # we should have the create and last set entries now
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1511 self.assertEqual(jlen-1, len(self.db.getjournal('issue', id)))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1512
1986
910b39f8c5b8 use the upload-supplied content-type if there is one
Richard Jones <richard@users.sourceforge.net>
parents: 1955
diff changeset
1513 def testIndexerSearching(self):
910b39f8c5b8 use the upload-supplied content-type if there is one
Richard Jones <richard@users.sourceforge.net>
parents: 1955
diff changeset
1514 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
1515 # 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
1516 f2 = self.db.file.create(content='world', type="text/frozz",
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1517 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
1518 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
1519 i2 = self.db.issue.create(title="flebble the frooz")
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
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([], self.db.issue), {})
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1522 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
1523 {i1: {'files': [f1]}})
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
1524 # 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
1525 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
1526 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
1527 {i2: {}})
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1528 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
1529 {i1: {}, i2: {}})
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1530
3048
d9b4224f955c merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3033
diff changeset
1531 # 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
1532 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
1533 self.db.issue), {i2: {}})
d9b4224f955c merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3033
diff changeset
1534
2872
d530b68e4b42 don't index common words [SF#1046612]
Richard Jones <richard@users.sourceforge.net>
parents: 2820
diff changeset
1535 # unindexed stopword
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1536 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
1537
6915
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1538 def testIndexerSearchingIgnoreProps(self):
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1539 f1 = self.db.file.create(content='hello', type="text/plain")
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1540 # content='world' has the wrong content-type and won't be indexed
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1541 f2 = self.db.file.create(content='world', type="text/frozz",
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1542 comment='blah blah')
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1543 i1 = self.db.issue.create(files=[f1, f2], title="flebble plop")
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1544 i2 = self.db.issue.create(title="flebble the frooz")
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1545 self.db.commit()
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1546
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1547 # filter out hits that are in the titpe prop of issues
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1548 self.assertEqual(self.db.indexer.search(['frooz'], self.db.issue,
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1549 ignore={('issue', 'title'): True}),
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1550 {})
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1551
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1552 # filter out hits in the title prop of content. Note the returned
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1553 # match is in a file not an issue, so ignore has no effect.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1554 # also there is no content property for issue.
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1555 self.assertEqual(self.db.indexer.search(['hello'], self.db.issue,
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1556 ignore={('issue', 'content'): True}),
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1557 {f1: {'files': ['1']}})
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1558
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1559 # filter out file content property hit leaving no results
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1560 self.assertEqual(self.db.indexer.search(['hello'], self.db.issue,
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1561 ignore={('file', 'content'): True}),
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1562 {})
9ff091537f43 postgresql native-fts; more indexer tests
John Rouillard <rouilj@ieee.org>
parents: 6677
diff changeset
1563
3997
edbb89730dc2 Fix indexer handling of indexed Link properties
Richard Jones <richard@users.sourceforge.net>
parents: 3995
diff changeset
1564 def testIndexerSearchingLink(self):
edbb89730dc2 Fix indexer handling of indexed Link properties
Richard Jones <richard@users.sourceforge.net>
parents: 3995
diff changeset
1565 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
1566 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
1567 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
1568 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
1569 self.db.commit()
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1570 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
1571 {i1: {'messages': [m1]}, i2: {'feedback': [m2]}})
edbb89730dc2 Fix indexer handling of indexed Link properties
Richard Jones <richard@users.sourceforge.net>
parents: 3995
diff changeset
1572
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
1573 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
1574 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
1575 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
1576 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
1577 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
1578 self.db.commit()
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1579 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
1580 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
1581 {i1: {'messages': [m1]}})
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1582 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
1583 {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
1584 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
1585 {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
1586
3547
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
1587 def testReindexingChange(self):
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1588 search = self.db.indexer.search
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1589 issue = self.db.issue
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1590 i1 = issue.create(title="flebble plop")
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1591 i2 = issue.create(title="flebble frooz")
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1592 self.db.commit()
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1593 self.assertEqual(search(['plop'], issue), {i1: {}})
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1594 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
1595
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1596 # change i1's title
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1597 issue.set(i1, title="plop")
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1598 self.db.commit()
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1599 self.assertEqual(search(['plop'], issue), {i1: {}})
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1600 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
1601
3547
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
1602 def testReindexingClear(self):
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
1603 search = self.db.indexer.search
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
1604 issue = self.db.issue
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
1605 i1 = issue.create(title="flebble plop")
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
1606 i2 = issue.create(title="flebble frooz")
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
1607 self.db.commit()
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1608 self.assertEqual(search(['plop'], issue), {i1: {}})
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1609 self.assertEqual(search(['flebble'], issue), {i1: {}, i2: {}})
3547
7728ee93efd2 fix reindexing in Xapian
Richard Jones <richard@users.sourceforge.net>
parents: 3546
diff changeset
1610
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1611 # unset i1's title
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1612 issue.set(i1, title="")
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1613 self.db.commit()
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1614 self.assertEqual(search(['plop'], issue), {})
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1615 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
1616
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1617 def testFileClassReindexing(self):
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1618 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
1619 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
1620 i1 = self.db.issue.create(files=[f1, f2])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1621 self.db.commit()
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1622 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
1623 self.assertTrue(i1 in d)
2089
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1624 d[i1]['files'].sort()
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1625 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
1626 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
1627 {i1: {'files': [f2]}})
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1628 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
1629 self.db.commit()
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1630 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
1631 d[i1]['files'].sort()
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1632 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
1633 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
1634 {i1: {'files': [f2]}})
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
1635
3601
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
1636 def testFileClassIndexingNoNoNo(self):
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
1637 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
1638 self.db.commit()
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1639 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
1640 {'1': {}})
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
1641
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
1642 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
1643 self.db.commit()
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1644 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
1645 {})
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
1646
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1647 def testForcedReindexing(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1648 self.db.issue.create(title="flebble frooz")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1649 self.db.commit()
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1650 self.assertEqual(self.db.indexer.search(['flebble'], self.db.issue),
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1651 {'1': {}})
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1652 self.db.indexer.quiet = 1
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1653 self.db.indexer.force_reindex()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1654 self.db.post_init()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1655 self.db.indexer.quiet = 9
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
1656 self.assertEqual(self.db.indexer.search(['flebble'], self.db.issue),
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1657 {'1': {}})
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1658
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
1659 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
1660 # 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
1661 title = 'Bzzt'
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
1662 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
1663 'spam', 'nosy', 'superseder', 'keywords', 'keywords2'],
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
1664 [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
1665 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
1666
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
1667 # 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
1668 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
1669 {str(nodeid):{}})
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
1670
3844
cf8b716d9ac2 Fix for [SF#698136] Trouble with full-text indexer, with test.
Erik Forsberg <forsberg@users.sourceforge.net>
parents: 3826
diff changeset
1671
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1672 #
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1673 # searching tests follow
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1674 #
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1675 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
1676 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
1677
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1678 def _find_test_setup(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1679 self.db.file.create(content='')
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1680 self.db.file.create(content='')
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1681 self.db.user.create(username='')
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1682 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
1683 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
1684 assignedto='2')
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1685 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
1686 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
1687 files=['1','2'])
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1688 return one, two, three, four
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1689
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1690 def testFindLink(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1691 one, two, three, four = self._find_test_setup()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1692 got = self.db.issue.find(status='1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1693 got.sort()
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1694 self.assertEqual(got, [one, three])
1912
2b0ab61db194 fixes for [SF#818339]
Richard Jones <richard@users.sourceforge.net>
parents: 1906
diff changeset
1695 got = self.db.issue.find(status={'1':1})
2b0ab61db194 fixes for [SF#818339]
Richard Jones <richard@users.sourceforge.net>
parents: 1906
diff changeset
1696 got.sort()
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1697 self.assertEqual(got, [one, three])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1698
6427
f08907bfd5a1 Fix find() with anydbm. Add fast return shortcut.
John Rouillard <rouilj@ieee.org>
parents: 6415
diff changeset
1699 def testFindProtectedLink(self):
f08907bfd5a1 Fix find() with anydbm. Add fast return shortcut.
John Rouillard <rouilj@ieee.org>
parents: 6415
diff changeset
1700 one, two, three, four = self._find_test_setup()
f08907bfd5a1 Fix find() with anydbm. Add fast return shortcut.
John Rouillard <rouilj@ieee.org>
parents: 6415
diff changeset
1701 got = self.db.issue.find(creator='1')
f08907bfd5a1 Fix find() with anydbm. Add fast return shortcut.
John Rouillard <rouilj@ieee.org>
parents: 6415
diff changeset
1702 got.sort()
f08907bfd5a1 Fix find() with anydbm. Add fast return shortcut.
John Rouillard <rouilj@ieee.org>
parents: 6415
diff changeset
1703 self.assertEqual(got, [one, two, three, four])
f08907bfd5a1 Fix find() with anydbm. Add fast return shortcut.
John Rouillard <rouilj@ieee.org>
parents: 6415
diff changeset
1704
6151
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1705 def testFindRevLinkMultilink(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1706 ae, dummy = self.filteringSetupTransitiveSearch('user')
6151
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1707 ni = 'nosy_issues'
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1708 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
1709 self.db.issue.set('7', nosy=['5'])
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1710 # 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
1711 # issue assignedto nosy
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1712 # 1: 6 4
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1713 # 2: 6 5
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1714 # 3: 7
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1715 # 4: 8
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1716 # 5: 9
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1717 # 6: 10 3, 4, 5
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1718 # 7: 10 5
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1719 # 8: 10
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1720 # assignedto links back from 'issues'
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1721 # nosy links back from 'nosy_issues'
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1722 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
1723 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
1724 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
1725 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
1726 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
1727 ['3', '4', '5'])
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1728 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
1729 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
1730 ['3', '4', '5'])
ff059afae50a Make 'find' work for rev_multilink properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6148
diff changeset
1731
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1732 def testFindLinkFail(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1733 self._find_test_setup()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1734 self.assertEqual(self.db.issue.find(status='4'), [])
1912
2b0ab61db194 fixes for [SF#818339]
Richard Jones <richard@users.sourceforge.net>
parents: 1906
diff changeset
1735 self.assertEqual(self.db.issue.find(status={'4':1}), [])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1736
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1737 def testFindLinkUnset(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1738 one, two, three, four = self._find_test_setup()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1739 got = self.db.issue.find(assignedto=None)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1740 got.sort()
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1741 self.assertEqual(got, [one, three])
1912
2b0ab61db194 fixes for [SF#818339]
Richard Jones <richard@users.sourceforge.net>
parents: 1906
diff changeset
1742 got = self.db.issue.find(assignedto={None:1})
2b0ab61db194 fixes for [SF#818339]
Richard Jones <richard@users.sourceforge.net>
parents: 1906
diff changeset
1743 got.sort()
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1744 self.assertEqual(got, [one, three])
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1745
2494
ea7fb2f416db fixed RDBMS Class.find() to handle None value in multiple find...
Richard Jones <richard@users.sourceforge.net>
parents: 2472
diff changeset
1746 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
1747 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
1748 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
1749 l.sort()
0aaf356fd105 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2906
diff changeset
1750 self.assertEqual(l, [one, three, four])
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1751 l = self.db.issue.find(status=('1', '3'))
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1752 l.sort()
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1753 self.assertEqual(l, [one, three, four])
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1754 l = self.db.issue.find(status=['1', '3'])
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1755 l.sort()
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
1756 self.assertEqual(l, [one, three, four])
2968
0aaf356fd105 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2906
diff changeset
1757 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
1758 l.sort()
0aaf356fd105 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2906
diff changeset
1759 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
1760
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1761 def testFindMultilink(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1762 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
1763 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
1764 got.sort()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1765 self.assertEqual(got, [two, three])
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1766 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
1767 got.sort()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1768 self.assertEqual(got, [two, three])
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1769 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
1770 got.sort()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1771 self.assertEqual(got, [two, three])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1772
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1773 def testFindMultiMultilink(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1774 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
1775 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
1776 got.sort()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1777 self.assertEqual(got, [two, three, four])
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1778 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
1779 got.sort()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1780 self.assertEqual(got, [two, three, four])
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1781
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1782 def testFindMultilinkFail(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1783 self._find_test_setup()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1784 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
1785 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
1786
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1787 def testFindMultilinkUnset(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1788 self._find_test_setup()
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1789 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
1790
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1791 def testFindLinkAndMultilink(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1792 one, two, three, four = self._find_test_setup()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1793 got = self.db.issue.find(status='1', nosy='2')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1794 got.sort()
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1795 self.assertEqual(got, [one, two, three])
1912
2b0ab61db194 fixes for [SF#818339]
Richard Jones <richard@users.sourceforge.net>
parents: 1906
diff changeset
1796 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
1797 got.sort()
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1798 self.assertEqual(got, [one, two, three])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1799
1988
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1800 def testFindRetired(self):
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1801 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
1802 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
1803 self.db.issue.retire(one)
5660b89f8903 more compliance testing, this time for find()
Richard Jones <richard@users.sourceforge.net>
parents: 1986
diff changeset
1804 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
1805
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1806 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
1807 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
1808
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1809 ids = []
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1810 ids.append(self.db.issue.create(title="spam"))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1811 self.db.issue.create(title="not spam")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1812 ids.append(self.db.issue.create(title="spam"))
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1813 ids.sort()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1814 got = self.db.issue.stringFind(title='spam')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1815 got.sort()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1816 self.assertEqual(got, ids)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1817 self.assertEqual(self.db.issue.stringFind(title='fubar'), [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1818
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
1819 # 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
1820 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
1821 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
1822
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1823 def filteringSetup(self, classname='issue'):
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1824 for user in (
4365
667c818f6a22 - unify bool searching (filter method) across backends
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4364
diff changeset
1825 {'username': 'bleep', 'age': 1, 'assignable': True},
667c818f6a22 - unify bool searching (filter method) across backends
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4364
diff changeset
1826 {'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
1827 {'username': 'blorp', 'age': 2, 'assignable': False}):
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1828 self.db.user.create(**user)
3675
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
1829 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
1830 f = self.db.file.create(content=file_content)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1831 for issue in (
1955
b00ad075bb2f more unit tests, fixes and cleanups
Richard Jones <richard@users.sourceforge.net>
parents: 1951
diff changeset
1832 {'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
1833 '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
1834 '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
1835 {'title': 'issue two', 'status': '1', 'assignedto': '2',
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
1836 '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
1837 'deadline': date.Date('2003-01-01.00:00')},
2601
113548baeed2 API clarification.
Richard Jones <richard@users.sourceforge.net>
parents: 2536
diff changeset
1838 {'title': 'issue three', 'status': '1', 'priority': '2',
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1839 'nosy': ['1','2'], 'deadline': date.Date('2003-02-18')},
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1840 {'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
1841 'foo': date.Interval('0:10'), 'priority': '2',
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
1842 '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
1843 'files': [f]}):
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1844 self.db.issue.create(**issue)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1845 self.db.commit()
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1846 return self.iterSetup(classname)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1847
6677
8ab98de22df0 issue2551159 - cl.filter fails if filterspec is None ...
John Rouillard <rouilj@ieee.org>
parents: 6604
diff changeset
1848 def testFilteringNone(self):
8ab98de22df0 issue2551159 - cl.filter fails if filterspec is None ...
John Rouillard <rouilj@ieee.org>
parents: 6604
diff changeset
1849 ae, iiter = self.filteringSetup()
8ab98de22df0 issue2551159 - cl.filter fails if filterspec is None ...
John Rouillard <rouilj@ieee.org>
parents: 6604
diff changeset
1850 for filt in iiter():
8ab98de22df0 issue2551159 - cl.filter fails if filterspec is None ...
John Rouillard <rouilj@ieee.org>
parents: 6604
diff changeset
1851 ae(filt(None, None, ('+','id'), (None,None)), ['1', '2', '3', '4'])
8ab98de22df0 issue2551159 - cl.filter fails if filterspec is None ...
John Rouillard <rouilj@ieee.org>
parents: 6604
diff changeset
1852
8ab98de22df0 issue2551159 - cl.filter fails if filterspec is None ...
John Rouillard <rouilj@ieee.org>
parents: 6604
diff changeset
1853 def testSortingNone(self):
8ab98de22df0 issue2551159 - cl.filter fails if filterspec is None ...
John Rouillard <rouilj@ieee.org>
parents: 6604
diff changeset
1854 ae, iiter = self.filteringSetup()
8ab98de22df0 issue2551159 - cl.filter fails if filterspec is None ...
John Rouillard <rouilj@ieee.org>
parents: 6604
diff changeset
1855 for filt in iiter():
8ab98de22df0 issue2551159 - cl.filter fails if filterspec is None ...
John Rouillard <rouilj@ieee.org>
parents: 6604
diff changeset
1856 ae(filt(None, {'id': ['1','3','4']}, None, ('-', 'status')),
8ab98de22df0 issue2551159 - cl.filter fails if filterspec is None ...
John Rouillard <rouilj@ieee.org>
parents: 6604
diff changeset
1857 ['3', '4', '1'])
8ab98de22df0 issue2551159 - cl.filter fails if filterspec is None ...
John Rouillard <rouilj@ieee.org>
parents: 6604
diff changeset
1858
8ab98de22df0 issue2551159 - cl.filter fails if filterspec is None ...
John Rouillard <rouilj@ieee.org>
parents: 6604
diff changeset
1859 def testGroupingNone(self):
8ab98de22df0 issue2551159 - cl.filter fails if filterspec is None ...
John Rouillard <rouilj@ieee.org>
parents: 6604
diff changeset
1860 ae, iiter = self.filteringSetup()
8ab98de22df0 issue2551159 - cl.filter fails if filterspec is None ...
John Rouillard <rouilj@ieee.org>
parents: 6604
diff changeset
1861 for filt in iiter():
8ab98de22df0 issue2551159 - cl.filter fails if filterspec is None ...
John Rouillard <rouilj@ieee.org>
parents: 6604
diff changeset
1862 ae(filt(None, {'title': ['issue']}, [('-', 'id')],
8ab98de22df0 issue2551159 - cl.filter fails if filterspec is None ...
John Rouillard <rouilj@ieee.org>
parents: 6604
diff changeset
1863 None), ['3', '2', '1'])
8ab98de22df0 issue2551159 - cl.filter fails if filterspec is None ...
John Rouillard <rouilj@ieee.org>
parents: 6604
diff changeset
1864
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1865 def testFilteringID(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1866 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1867 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1868 ae(filt(None, {'id': '1'}, ('+','id'), (None,None)), ['1'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1869 ae(filt(None, {'id': '2'}, ('+','id'), (None,None)), ['2'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1870 ae(filt(None, {'id': '100'}, ('+','id'), (None,None)), [])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1871
4365
667c818f6a22 - unify bool searching (filter method) across backends
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4364
diff changeset
1872 def testFilteringBoolean(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1873 ae, iiter = self.filteringSetup('user')
4365
667c818f6a22 - unify bool searching (filter method) across backends
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4364
diff changeset
1874 a = 'assignable'
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1875 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1876 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
1877 ae(filt(None, {a: '0'}, ('+','id'), (None,None)), ['5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1878 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
1879 ae(filt(None, {a: ['0']}, ('+','id'), (None,None)), ['5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1880 ae(filt(None, {a: ['0','1']}, ('+','id'), (None,None)),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1881 ['3','4','5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1882 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
1883 ae(filt(None, {a: 'False'}, ('+','id'), (None,None)), ['5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1884 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
1885 ae(filt(None, {a: ['False']}, ('+','id'), (None,None)), ['5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1886 ae(filt(None, {a: ['False','True']}, ('+','id'), (None,None)),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1887 ['3','4','5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1888 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
1889 ae(filt(None, {a: False}, ('+','id'), (None,None)), ['5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1890 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
1891 ae(filt(None, {a: 0}, ('+','id'), (None,None)), ['5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1892 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
1893 ae(filt(None, {a: [0]}, ('+','id'), (None,None)), ['5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1894 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
1895 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
1896 ae(filt(None, {a: [False]}, ('+','id'), (None,None)), ['5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1897 ae(filt(None, {a: [False,True]}, ('+','id'), (None,None)),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1898 ['3','4','5'])
4365
667c818f6a22 - unify bool searching (filter method) across backends
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4364
diff changeset
1899
2418
89072e66b5f5 fixed filtering by floats in anydbm [SF#963584]
Richard Jones <richard@users.sourceforge.net>
parents: 2400
diff changeset
1900 def testFilteringNumber(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1901 ae, iiter = self.filteringSetup('user')
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1902 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1903 ae(filt(None, {'age': '1'}, ('+','id'), (None,None)), ['3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1904 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
1905 ae(filt(None, {'age': '2'}, ('+','id'), (None,None)), ['5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1906 ae(filt(None, {'age': ['1','2']}, ('+','id'), (None,None)),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1907 ['3','5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1908 ae(filt(None, {'age': 2}, ('+','id'), (None,None)), ['5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1909 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
1910
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1911 def testFilteringString(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1912 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1913 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1914 ae(filt(None, {'title': ['one']}, ('+','id'), (None,None)), ['1'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1915 ae(filt(None, {'title': ['issue one']}, ('+','id'), (None,None)),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1916 ['1'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1917 ae(filt(None, {'title': ['issue', 'one']}, ('+','id'), (None,None)),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1918 ['1'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1919 ae(filt(None, {'title': ['issue']}, ('+','id'), (None,None)),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1920 ['1','2','3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1921 ae(filt(None, {'title': ['one', 'two']}, ('+','id'), (None,None)),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1922 [])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1923
4787
4a017661e414 Closed issue2550805 (Postgresql should search title case insensitive), by Tom Ekberg.
Bernhard Reiter <bernhard@intevation.de>
parents: 4786
diff changeset
1924 def testFilteringStringCase(self):
4a017661e414 Closed issue2550805 (Postgresql should search title case insensitive), by Tom Ekberg.
Bernhard Reiter <bernhard@intevation.de>
parents: 4786
diff changeset
1925 """
4a017661e414 Closed issue2550805 (Postgresql should search title case insensitive), by Tom Ekberg.
Bernhard Reiter <bernhard@intevation.de>
parents: 4786
diff changeset
1926 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
1927 have different capitalization.
4a017661e414 Closed issue2550805 (Postgresql should search title case insensitive), by Tom Ekberg.
Bernhard Reiter <bernhard@intevation.de>
parents: 4786
diff changeset
1928 """
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1929 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1930 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
1931 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
1932 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
1933 ['1'])
4a017661e414 Closed issue2550805 (Postgresql should search title case insensitive), by Tom Ekberg.
Bernhard Reiter <bernhard@intevation.de>
parents: 4786
diff changeset
1934 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
1935 ['1'])
4a017661e414 Closed issue2550805 (Postgresql should search title case insensitive), by Tom Ekberg.
Bernhard Reiter <bernhard@intevation.de>
parents: 4786
diff changeset
1936 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
1937 ['1','2','3'])
4a017661e414 Closed issue2550805 (Postgresql should search title case insensitive), by Tom Ekberg.
Bernhard Reiter <bernhard@intevation.de>
parents: 4786
diff changeset
1938 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
1939 [])
4a017661e414 Closed issue2550805 (Postgresql should search title case insensitive), by Tom Ekberg.
Bernhard Reiter <bernhard@intevation.de>
parents: 4786
diff changeset
1940
5867
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1941 def testFilteringStringExactMatch(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1942 ae, iiter = self.filteringSetup()
5867
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1943 # 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
1944 # search vs exact search
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1945 self.db.issue.set('2', title='issue')
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1946 #self.db.commit()
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1947 for filt in iiter():
5867
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1948 ae(filt(None, {}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1949 {'title': ['one']}), [])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1950 ae(filt(None, {}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1951 {'title': ['issue one']}), ['1'])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1952 ae(filt(None, {}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1953 {'title': ['issue', 'one']}), [])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1954 ae(filt(None, {}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1955 {'title': ['issue']}), ['2'])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1956 ae(filt(None, {}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1957 {'title': ['one', 'two']}), [])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1958 ae(filt(None, {}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1959 {'title': ['One']}), [])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1960 ae(filt(None, {}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1961 {'title': ['Issue One']}), [])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1962 ae(filt(None, {}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1963 {'title': ['ISSUE', 'ONE']}), [])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1964 ae(filt(None, {}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1965 {'title': ['iSSUE']}), [])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1966 ae(filt(None, {}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1967 {'title': ['One', 'Two']}), [])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1968 ae(filt(None, {}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1969 {'title': ['non four']}), ['4'])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1970 # Both, filterspec and exact_match_spec on same prop
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1971 ae(filt(None, {'title': 'iSSUE'}, exact_match_spec =
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1972 {'title': ['issue']}), ['2'])
ee2e8f8d6648 Implement exact string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5790
diff changeset
1973
4849
e68920390aad Fix SQL wildcards in string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4787
diff changeset
1974 def testFilteringSpecialChars(self):
e68920390aad Fix SQL wildcards in string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4787
diff changeset
1975 """ 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
1976 to lead to a traceback.
e68920390aad Fix SQL wildcards in string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4787
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()
4849
e68920390aad Fix SQL wildcards in string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4787
diff changeset
1979 self.db.issue.set('1', title="With % symbol")
e68920390aad Fix SQL wildcards in string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4787
diff changeset
1980 self.db.issue.set('2', title="With _ symbol")
e68920390aad Fix SQL wildcards in string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4787
diff changeset
1981 self.db.issue.set('3', title="With \\ symbol")
e68920390aad Fix SQL wildcards in string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4787
diff changeset
1982 self.db.issue.set('4', title="With ' symbol")
e68920390aad Fix SQL wildcards in string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4787
diff changeset
1983 d = dict (status = '1')
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1984 for filt in iiter():
4849
e68920390aad Fix SQL wildcards in string search
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4787
diff changeset
1985 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
1986 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
1987 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
1988 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
1989
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1990 def testFilteringLink(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1991 ae, iiter = self.filteringSetup()
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1992 a = 'assignedto'
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1993 grp = (None, None)
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
1994 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1995 ae(filt(None, {'status': '1'}, ('+','id'), grp), ['2','3'])
6410
66ccddb034f2 Bug-fix in expression parser
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6403
diff changeset
1996 ae(filt(None, {'status': [], 'status.name': 'unread'}), [])
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1997 ae(filt(None, {a: '-1'}, ('+','id'), grp), ['3','4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1998 ae(filt(None, {a: None}, ('+','id'), grp), ['3','4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
1999 ae(filt(None, {a: [None]}, ('+','id'), grp), ['3','4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2000 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
2001 ae(filt(None, {a: ['1', None]}, ('+','id'), grp), ['1', '3','4'])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2002
6412
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2003 def testFilteringLinkExpression(self):
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2004 ae, iiter = self.filteringSetup()
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2005 a = 'assignedto'
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2006 for filt in iiter():
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2007 ae(filt(None, {}, ('+',a)), ['3','4','1','2'])
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2008 ae(filt(None, {a: '1'}, ('+',a)), ['1'])
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2009 ae(filt(None, {a: '2'}, ('+',a)), ['2'])
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2010 ae(filt(None, {a: '-1'}, ('+','status')), ['4','3'])
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2011 ae(filt(None, {a: []}, ('+','id')), ['3','4'])
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2012 ae(filt(None, {a: ['-1']}, ('+',a)), ['3','4'])
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2013 ae(filt(None, {a: []}, ('+',a)), ['3','4'])
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2014 ae(filt(None, {a: '-1'}, ('+',a)), ['3','4'])
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2015 ae(filt(None, {a: ['1','-1']}), ['1','3','4'])
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2016 ae(filt(None, {a: ['1','-1']}, ('+',a)), ['3','4','1'])
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2017 ae(filt(None, {a: ['2','-1']}, ('+',a)), ['3','4','2'])
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2018 ae(filt(None, {a: ['1','-2']}), ['2','3','4'])
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2019 ae(filt(None, {a: ['1','-2']}, ('+',a)), ['3','4','2'])
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2020 ae(filt(None, {a: ['-1','-2']}, ('+',a)), ['1','2'])
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2021 ae(filt(None, {a: ['1','2','-3']}, ('+',a)), [])
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2022 ae(filt(None, {a: ['1','2','-4']}, ('+',a)), ['1','2'])
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2023 ae(filt(None, {a: ['1','-2','2','-2','-3']}, ('+',a)), ['3','4'])
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2024 ae(filt(None, {a: ['1','-2','2','-2','-4']}, ('+',a)),
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2025 ['3','4','1','2'])
a0c0ee3ed8b1 Tests for Link expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6411
diff changeset
2026
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2027 def testFilteringRevLink(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2028 ae, iiter = self.filteringSetupTransitiveSearch('user')
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2029 # We have
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2030 # issue assignedto
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2031 # 1: 6
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2032 # 2: 6
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2033 # 3: 7
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2034 # 4: 8
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2035 # 5: 9
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2036 # 6: 10
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2037 # 7: 10
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2038 # 8: 10
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2039 for filt in iiter():
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2040 ae(filt(None, {'issues': ['3', '4']}), ['7', '8'])
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2041 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
2042 ae(filt(None, {'issues.title': ['ts2']}), ['6'])
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2043 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
2044 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
2045 def ls(x):
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2046 return list(sorted(x))
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2047 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
2048 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
2049 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
2050 n = self.db.user.getnode('6')
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2051 self.assertEqual(ls(n.issues), ['1', '2'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2052 # Now retire some linked-to issues and retry
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2053 self.db.issue.retire('6')
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2054 self.db.issue.retire('2')
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2055 self.db.issue.retire('3')
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2056 self.db.commit()
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2057 for filt in iiter():
6179
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2058 ae(filt(None, {'issues': ['3', '4']}), ['8'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2059 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
2060 ae(filt(None, {'issues.title': ['ts2']}), [])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2061 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
2062 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
2063 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
2064 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
2065 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
2066
6402
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2067 def testFilteringRevLinkExpression(self):
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2068 ae, iiter = self.filteringSetupTransitiveSearch('user')
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2069 # We have
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2070 # issue assignedto
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2071 # 1: 6
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2072 # 2: 6
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2073 # 3: 7
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2074 # 4: 8
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2075 # 5: 9
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2076 # 6: 10
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2077 # 7: 10
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2078 # 8: 10
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2079 for filt in iiter():
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2080 # Explicit 'or'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2081 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
2082 # Implicit or with '-1'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2083 ae(filt(None, {'issues': ['3', '4', '-1']}),
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2084 ['1', '2', '3', '4', '5', '7', '8'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2085 # 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
2086 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
2087 ['1', '2', '3', '4', '5', '7', '8'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2088 # '3' and empty
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2089 ae(filt(None, {'issues': ['3', '-1', '-3']}), [])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2090 # '6' and '7' and '8'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2091 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
2092 # '6' and '7' or '1' and '2'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2093 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
2094 ['6', '10'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2095 # '1' or '4'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2096 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
2097
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2098 # Now retire some linked-to issues and retry
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2099 self.db.issue.retire('6')
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2100 self.db.issue.retire('2')
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2101 self.db.issue.retire('3')
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2102 self.db.commit()
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2103 # We have now
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2104 # issue assignedto
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2105 # 1: 6
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2106 # 4: 8
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2107 # 5: 9
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2108 # 7: 10
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2109 # 8: 10
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2110 for filt in iiter():
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2111 # Explicit 'or'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2112 ae(filt(None, {'issues': ['3', '4', '-4']}), ['8'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2113 # Implicit or with '-1'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2114 ae(filt(None, {'issues': ['3', '4', '-1']}),
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2115 ['1', '2', '3', '4', '5', '7', '8'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2116 # 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
2117 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
2118 ['1', '2', '3', '4', '5', '7', '8'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2119 # '3' and empty
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2120 ae(filt(None, {'issues': ['3', '-1', '-3']}), [])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2121 # '6' and '7' and '8'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2122 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
2123 # '7' and '8'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2124 ae(filt(None, {'issues': ['7', '8', '-3']}), ['10'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2125 # '6' and '7' or '1' and '2'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2126 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
2127 [])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2128 # '1' or '4'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2129 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
2130
4850
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
2131 def testFilteringLinkSortSearchMultilink(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2132 ae, iiter = self.filteringSetup()
4850
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
2133 a = 'assignedto'
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
2134 grp = (None, None)
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2135 for filt in iiter():
4850
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
2136 ae(filt(None, {'status.mls': '1'}, ('+','status')), ['2','3'])
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
2137 ae(filt(None, {'status.mls': '2'}, ('+','status')), ['2','3'])
6998ad77841e Fix bug in SQL generation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4849
diff changeset
2138
3675
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
2139 def testFilteringMultilinkAndGroup(self):
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
2140 """testFilteringMultilinkAndGroup:
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
2141 See roundup Bug 1541128: apparently grouping by something and
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
2142 searching a Multilink failed with MySQL 5.0
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
2143 """
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2144 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2145 for f in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2146 ae(f(None, {'files': '1'}, ('-','activity'), ('+','status')), ['4'])
3675
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
2147
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2148 def testFilteringRetired(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2149 ae, iiter = self.filteringSetup()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2150 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
2151 for f in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2152 ae(f(None, {'status': '1'}, ('+','id'), (None,None)), ['3'])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2153
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2154 def testFilteringMultilink(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2155 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2156 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2157 ae(filt(None, {'nosy': '3'}, ('+','id'), (None,None)), ['4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2158 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
2159 ae(filt(None, {'nosy': ['1','2']}, ('+', 'status'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2160 ('-', 'deadline')), ['4', '3'])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2161
6394
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2162 def testFilteringMultilinkExpression(self):
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2163 ae, iiter = self.filteringSetup()
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2164 kw1 = self.db.keyword.create(name='Key1')
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2165 kw2 = self.db.keyword.create(name='Key2')
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2166 kw3 = self.db.keyword.create(name='Key3')
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2167 kw4 = self.db.keyword.create(name='Key4')
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2168 self.db.issue.set('1', keywords=[kw1, kw2])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2169 self.db.issue.set('2', keywords=[kw1, kw3])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2170 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
2171 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
2172 self.db.commit()
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2173 kw = 'keywords'
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2174 for filt in iiter():
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2175 # '1' and '2'
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2176 ae(filt(None, {kw: ['1', '2', '-3']}),
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2177 ['1', '4'])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2178 # ('2' and '4') and '1'
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2179 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
2180 ['4'])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2181 # not '4' and '3'
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2182 ae(filt(None, {kw: ['3', '4', '-2', '-3']}),
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2183 ['2'])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2184 # (not '4' and '3') and '2'
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2185 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
2186 [])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2187 # '1' or '2' without explicit 'or'
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2188 ae(filt(None, {kw: ['1', '2']}),
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2189 ['1', '2', '3', '4'])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2190 # '1' or '2' with explicit 'or'
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2191 ae(filt(None, {kw: ['1', '2', '-4']}),
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2192 ['1', '2', '3', '4'])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2193 # '3' or '4' without explicit 'or'
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2194 ae(filt(None, {kw: ['3', '4']}),
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2195 ['2', '3', '4'])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2196 # '3' or '4' with explicit 'or'
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2197 ae(filt(None, {kw: ['3', '4', '-4']}),
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2198 ['2', '3', '4'])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2199 # ('3' and '4') or ('1' and '2')
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2200 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
2201 ['1', '3', '4'])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2202 # '2' and empty
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2203 ae(filt(None, {kw: ['2', '-1', '-3']}),
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2204 [])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2205 self.db.issue.set('1', keywords=[])
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2206 self.db.commit()
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2207 for filt in iiter():
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2208 ae(filt(None, {kw: ['-1']}),
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2209 ['1'])
6396
75a53956cf13 Multilink expressions with simple "or"
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6395
diff changeset
2210 # '3' or empty (without explicit 'or')
75a53956cf13 Multilink expressions with simple "or"
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6395
diff changeset
2211 ae(filt(None, {kw: ['3', '-1']}),
75a53956cf13 Multilink expressions with simple "or"
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6395
diff changeset
2212 ['1', '2', '3'])
6394
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2213 # '3' or empty (with explicit 'or')
6399
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2214 ae(filt(None, {kw: ['3', '-1', '-4']}),
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2215 ['1', '2', '3'])
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2216 # empty or '3' (with explicit 'or')
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2217 ae(filt(None, {kw: ['-1', '3', '-4']}),
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2218 ['1', '2', '3'])
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2219 # '3' and empty (should always return empty list)
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2220 ae(filt(None, {kw: ['3', '-1', '-3']}),
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2221 [])
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2222 # empty and '3' (should always return empty list)
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2223 ae(filt(None, {kw: ['3', '-1', '-3']}),
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2224 [])
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2225 # ('4' and empty) or ('3' or empty)
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2226 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
2227 ['1', '2', '3'])
6394
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
2228
6403
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2229 def testFilteringTwoMultilinksExpression(self):
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2230 ae, iiter = self.filteringSetup()
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2231 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
2232 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
2233 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
2234 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
2235 self.db.issue.set('1', keywords=[kw1, kw2])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2236 self.db.issue.set('2', keywords=[kw1, kw3])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2237 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
2238 self.db.issue.set('4', keywords=[])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2239 self.db.issue.set('1', keywords2=[kw3, kw4])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2240 self.db.issue.set('2', keywords2=[kw2, kw3])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2241 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
2242 self.db.issue.set('4', keywords2=[])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2243 self.db.commit()
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2244 kw = 'keywords'
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2245 kw2 = 'keywords2'
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2246 for filt in iiter():
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2247 # kw: '1' and '3' kw2: '2' and '3'
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2248 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
2249 # kw: empty kw2: empty
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2250 ae(filt(None, {kw: ['-1'], kw2: ['-1']}), ['4'])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2251 # kw: empty kw2: empty
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2252 ae(filt(None, {kw: [], kw2: []}), ['4'])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2253 # look for both keyword name and order
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2254 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
2255 # look for both keyword and order non-matching
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2256 ae(filt(None, {kw: '3', 'keywords.order': 40}), [])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2257 # 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
2258 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
2259
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2260 def testFilteringRevMultilink(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.filteringSetupTransitiveSearch('user')
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2262 ni = 'nosy_issues'
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2263 self.db.issue.set('6', nosy=['3', '4', '5'])
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2264 self.db.issue.set('7', nosy=['5'])
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2265 # 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
2266 # issue nosy
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2267 # 1: 4
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2268 # 2: 5
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2269 # 3:
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2270 # 4:
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2271 # 5:
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2272 # 6: 3, 4, 5
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2273 # 7: 5
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2274 # 8:
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2275 for filt in iiter():
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2276 ae(filt(None, {ni: ['1', '2']}), ['4', '5'])
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2277 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
2278 ae(filt(None, {'nosy_issues.title': ['ts2']}), ['5'])
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
2279 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
2280 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
2281 def ls(x):
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2282 return list(sorted(x))
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2283 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
2284 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
2285 n = self.db.user.getnode('4')
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2286 self.assertEqual(ls(n.nosy_issues), ['1', '6'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2287 # Now retire some linked-to issues and retry
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2288 self.db.issue.retire('2')
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2289 self.db.issue.retire('6')
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2290 self.db.commit()
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2291 for filt in iiter():
6179
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2292 ae(filt(None, {ni: ['1', '2']}), ['4'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2293 ae(filt(None, {ni: ['6','7']}), ['5'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2294 ae(filt(None, {'nosy_issues.title': ['ts2']}), [])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2295 ae(filt(None, {ni: ['-1']}),
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2296 ['1', '2', '3', '6', '7', '8', '9', '10'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2297 ae(filt(None, {ni: '-1'}),
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2298 ['1', '2', '3', '6', '7', '8', '9', '10'])
a701c9c81597 Fix rev_multilink properties search/retrieval
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6151
diff changeset
2299 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
2300 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
2301
6403
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2302 def testFilteringRevMultilinkQ2(self):
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2303 ae, iiter = self.filteringSetupTransitiveSearch('user')
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2304 ni = 'nosy_issues'
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2305 nis = 'nosy_issues.status'
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2306 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
2307 self.db.issue.set('7', nosy=['5'])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2308 self.db.commit()
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2309 # 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
2310 # 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
2311 # issue nosy
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2312 # 1: 4
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2313 # 2: 5
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2314 # 3:
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2315 # 4:
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2316 # 5:
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2317 # 6: 3, 4, 5
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2318 # 7: 5
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2319 # 8:
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2320 for filt in iiter():
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2321 # status of issue is '2'
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2322 ae(filt(None, {nis: ['2']}),
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2323 ['4', '5'])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2324 # 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
2325 ae(filt(None, {nis: ['2'], ni:['-1', '-2']}),
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2326 ['4', '5'])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2327 # empty and status '2'
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2328 # This is the test-case for issue2551119
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2329 ae(filt(None, {nis: ['2'], ni:['-1']}), [])
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
2330
6397
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2331 def testFilteringRevMultilinkExpression(self):
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2332 ae, iiter = self.filteringSetupTransitiveSearch('user')
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2333 ni = 'nosy_issues'
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2334 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
2335 self.db.issue.set('7', nosy=['5'])
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2336 # 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
2337 # issue nosy
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2338 # 1: 4
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2339 # 2: 5
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2340 # 3:
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2341 # 4:
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2342 # 5:
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2343 # 6: 3, 4, 5
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2344 # 7: 5
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2345 # 8:
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2346 # 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
2347 self.db.user.retire('9')
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2348 self.db.user.retire('10')
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2349 self.db.commit()
6397
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2350 for filt in iiter():
6402
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2351 # not empty
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2352 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
2353 # '1' or '2'
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2354 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
2355 # '6' or '7'
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2356 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
2357 # '6' and '7'
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2358 ae(filt(None, {ni: ['6', '7', '-3']}), ['5'])
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2359 # '6' and not '1'
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2360 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
2361 # '2' or empty (implicit or)
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2362 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
2363 # '2' or empty (explicit or)
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2364 ae(filt(None, {ni: ['-1', '2', '-4']}),
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2365 ['1', '2', '5', '6', '7', '8'])
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2366 # empty or '2' (explicit or)
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2367 ae(filt(None, {ni: ['2', '-1', '-4']}),
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2368 ['1', '2', '5', '6', '7', '8'])
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2369 # '2' and empty (should always return empty list)
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2370 ae(filt(None, {ni: ['-1', '2', '-3']}), [])
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2371 # empty and '2' (should always return empty list)
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2372 ae(filt(None, {ni: ['2', '-1', '-3']}), [])
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2373 # ('4' and empty) or ('2' or empty)
f3fcd6628c0c Allow '-1' (empty) in multilink expression
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6397
diff changeset
2374 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
2375 ['1', '2', '5', '6', '7', '8'])
6402
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2376 # Retire issues 2, 6 and retry
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2377 self.db.issue.retire('2')
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2378 self.db.issue.retire('6')
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2379 self.db.commit()
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2380 # 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
2381 # issue nosy
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2382 # 1: 4
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2383 # 3:
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2384 # 4:
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2385 # 5:
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2386 # 7: 5
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2387 # 8:
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2388 for filt in iiter():
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2389 # not empty
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2390 ae(filt(None, {ni: ['-1', '-2']}), ['4', '5'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2391 # '1' or '2' (implicit)
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2392 ae(filt(None, {ni: ['1', '2']}), ['4'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2393 # '1' or '2'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2394 ae(filt(None, {ni: ['1', '2', '-4']}), ['4'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2395 # '6' or '7'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2396 ae(filt(None, {ni: ['6', '7', '-4']}), ['5'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2397 # '6' and '7'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2398 ae(filt(None, {ni: ['6', '7', '-3']}), [])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2399 # '6' and not '1'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2400 ae(filt(None, {ni: ['6', '1', '-2', '-3']}), [])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2401 # not '1'
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2402 ae(filt(None, {ni: ['1', '-2']}),
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2403 ['1', '2', '3', '5', '6', '7', '8'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2404 # '2' or empty (implicit or)
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2405 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
2406 # '2' or empty (explicit or)
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2407 ae(filt(None, {ni: ['-1', '2', '-4']}),
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2408 ['1', '2', '3', '6', '7', '8'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2409 # empty or '2' (explicit or)
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2410 ae(filt(None, {ni: ['2', '-1', '-4']}),
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2411 ['1', '2', '3', '6', '7', '8'])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2412 # '2' and empty (should always return empty list)
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2413 ae(filt(None, {ni: ['-1', '2', '-3']}), [])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2414 # empty and '2' (should always return empty list)
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2415 ae(filt(None, {ni: ['2', '-1', '-3']}), [])
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2416 # ('4' and empty) or ('2' or empty)
619807d9a2df Make rev multilink for Link work
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6401
diff changeset
2417 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
2418 ['1', '2', '3', '6', '7', '8'])
6397
1361e07f5b24 Add test for rev multilink expressions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6396
diff changeset
2419
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2420 def testFilteringMany(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2421 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2422 for f in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2423 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
2424 ['3'])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2425
3746
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
2426 def testFilteringRangeBasic(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2427 ae, iiter = self.filteringSetup()
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2428 d = 'deadline'
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2429 for f in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2430 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
2431 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
2432 ae(f(None, {d: '; 2003-02-16'}), ['2'])
3746
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
2433
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
2434 def testFilteringRangeTwoSyntaxes(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2435 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2436 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2437 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
2438 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
2439
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
2440 def testFilteringRangeYearMonthDay(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2441 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2442 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2443 ae(filt(None, {'deadline': '2002'}), [])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2444 ae(filt(None, {'deadline': '2003'}), ['1', '2', '3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2445 ae(filt(None, {'deadline': '2004'}), ['4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2446 ae(filt(None, {'deadline': '2003-02-16'}), ['1'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2447 ae(filt(None, {'deadline': '2003-02-17'}), [])
3746
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
2448
3952
c68581212cf7 add some Range testing, all of which currently fails
Richard Jones <richard@users.sourceforge.net>
parents: 3935
diff changeset
2449 def testFilteringRangeMonths(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2450 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
2451 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
2452 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
2453 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
2454 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
2455 self.db.commit()
c68581212cf7 add some Range testing, all of which currently fails
Richard Jones <richard@users.sourceforge.net>
parents: 3935
diff changeset
2456
c68581212cf7 add some Range testing, all of which currently fails
Richard Jones <richard@users.sourceforge.net>
parents: 3935
diff changeset
2457 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
2458 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2459 r = filt(None, dict(deadline='2001-%02d'%month))
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2460 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
2461
6118
e6073c2291c6 Better Date filtering
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6089
diff changeset
2462 def testFilteringDateRangeMulti(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2463 ae, iiter = self.filteringSetup()
6118
e6073c2291c6 Better Date filtering
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6089
diff changeset
2464 self.db.issue.create(title='no deadline')
e6073c2291c6 Better Date filtering
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6089
diff changeset
2465 self.db.commit()
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2466 for filt in iiter():
6118
e6073c2291c6 Better Date filtering
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6089
diff changeset
2467 r = filt (None, dict(deadline='-'))
e6073c2291c6 Better Date filtering
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6089
diff changeset
2468 self.assertEqual(r, ['5'])
e6073c2291c6 Better Date filtering
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6089
diff changeset
2469 r = filt (None, dict(deadline=';2003-02-01,2004;'))
e6073c2291c6 Better Date filtering
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6089
diff changeset
2470 self.assertEqual(r, ['2', '4'])
e6073c2291c6 Better Date filtering
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6089
diff changeset
2471 r = filt (None, dict(deadline='-,;2003-02-01,2004;'))
e6073c2291c6 Better Date filtering
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6089
diff changeset
2472 self.assertEqual(r, ['2', '4', '5'])
e6073c2291c6 Better Date filtering
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6089
diff changeset
2473
3746
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
2474 def testFilteringRangeInterval(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2475 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2476 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2477 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
2478 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
2479 ae(filt(None, {'foo': 'from 5:50'}), ['2'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2480 ae(filt(None, {'foo': 'to 0:05'}), [])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2481
3746
5cde43526788 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3743
diff changeset
2482 def testFilteringRangeGeekInterval(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2483 ae, iiter = self.filteringSetup()
4876
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2484 # Note: When querying, create date one minute later than the
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2485 # timespan later queried to avoid race conditions where the
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2486 # creation of the deadline is more than a second ago when
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2487 # queried -- in that case we wouldn't get the expected result.
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2488 # By extending the interval by a minute we would need a very
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2489 # 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
2490 for issue in (
4876
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2491 { 'deadline': date.Date('. -2d') + date.Interval ('00:01')},
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2492 { 'deadline': date.Date('. -1d') + date.Interval ('00:01')},
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2493 { '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
2494 ):
f47bddab5a49 date spec wasn't allowing week intervals
Richard Jones <richard@users.sourceforge.net>
parents: 3554
diff changeset
2495 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
2496 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2497 ae(filt(None, {'deadline': '-2d;'}), ['5', '6'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2498 ae(filt(None, {'deadline': '-1d;'}), ['6'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2499 ae(filt(None, {'deadline': '-1w;'}), ['5', '6'])
4876
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2500 ae(filt(None, {'deadline': '. -2d;'}), ['5', '6'])
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2501 ae(filt(None, {'deadline': '. -1d;'}), ['6'])
74b24b14071a Fix issue2550835
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4850
diff changeset
2502 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
2503
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2504 def testFilteringIntervalSort(self):
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
2505 # 1: '1:10'
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
2506 # 2: '1d'
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
2507 # 3: None
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
2508 # 4: '0:10'
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2509 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2510 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2511 # ascending should sort None, 1:10, 1d
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2512 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
2513 # descending should sort 1d, 1:10, None
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2514 ae(filt(None, {}, ('-','foo'), (None,None)), ['2', '1', '4', '3'])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2515
3681
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2516 def testFilteringStringSort(self):
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2517 # 1: 'issue one'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2518 # 2: 'issue two'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2519 # 3: 'issue three'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2520 # 4: 'non four'
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2521 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2522 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2523 ae(filt(None, {}, ('+','title')), ['1', '3', '2', '4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2524 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
2525 # 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
2526 # 1: 'issue one'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2527 # 2: 'issue two'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2528 # 3: 'Issue three'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2529 # 4: 'non four'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2530 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
2531 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2532 ae(filt(None, {}, ('+','title')), ['1', '3', '2', '4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2533 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
2534 # 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
2535 # 1: '1st issue'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2536 # 2: '2'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2537 # 3: 'Issue three'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2538 # 4: 'non four'
b9301ae1c34d Added a test case for string comparison:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3675
diff changeset
2539 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
2540 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
2541 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2542 ae(filt(None, {}, ('+','title')), ['1', '2', '3', '4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2543 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
2544
2185
c52a931879c4 sort/group by multilink in RDBMS
Richard Jones <richard@users.sourceforge.net>
parents: 2102
diff changeset
2545 def testFilteringMultilinkSort(self):
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2546 # 1: [] Reverse: 1: []
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
2547 # 2: [] 2: []
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
2548 # 3: ['admin','fred'] 3: ['fred','admin']
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2549 # 4: ['admin','bleep','fred'] 4: ['fred','bleep','admin']
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2550 # 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
2551 # 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
2552 # multilink!
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2553 # 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
2554 # 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
2555 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2556 for filt in iiter():
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2557 if filt.__name__ != 'filter':
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2558 continue
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2559 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
2560 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
2561
3675
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
2562 def testFilteringMultilinkSortGroup(self):
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
2563 # 1: status: 2 "in-progress" nosy: []
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
2564 # 2: status: 1 "unread" nosy: []
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2565 # 3: status: 1 "unread" nosy: ['admin','fred']
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2566 # 4: status: 3 "testing" nosy: ['admin','bleep','fred']
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2567 # 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
2568 # 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
2569 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2570 for filt in iiter():
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2571 if filt.__name__ != 'filter':
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2572 continue
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2573 ae(filt(None, {}, ('+','nosy'), ('+','status')),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2574 ['1', '4', '2', '3'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2575 ae(filt(None, {}, ('-','nosy'), ('+','status')),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2576 ['1', '4', '3', '2'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2577 ae(filt(None, {}, ('+','nosy'), ('-','status')),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2578 ['2', '3', '4', '1'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2579 ae(filt(None, {}, ('-','nosy'), ('-','status')),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2580 ['3', '2', '4', '1'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2581 ae(filt(None, {}, ('+','status'), ('+','nosy')),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2582 ['1', '2', '4', '3'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2583 ae(filt(None, {}, ('-','status'), ('+','nosy')),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2584 ['2', '1', '4', '3'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2585 ae(filt(None, {}, ('+','status'), ('-','nosy')),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2586 ['4', '3', '1', '2'])
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2587 ae(filt(None, {}, ('-','status'), ('-','nosy')),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2588 ['4', '3', '2', '1'])
3675
f3785d646f22 Added two new tests:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3636
diff changeset
2589
3525
7be25d75c3d5 Fixed SQL generation for sort/group by separate Link properties [SF#1417565]
Richard Jones <richard@users.sourceforge.net>
parents: 3486
diff changeset
2590 def testFilteringLinkSortGroup(self):
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2591 # 1: status: 2 -> 'i', priority: 3 -> 1
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2592 # 2: status: 1 -> 'u', priority: 3 -> 1
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2593 # 3: status: 1 -> 'u', priority: 2 -> 3
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2594 # 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
2595 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2596 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2597 ae(filt(None, {}, ('+','status'), ('+','priority')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2598 ['1', '2', '4', '3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2599 ae(filt(None, {'priority':'2'}, ('+','status'), ('+','priority')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2600 ['4', '3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2601 ae(filt(None, {'priority.order':'3'}, ('+','status'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2602 ('+','priority')), ['4', '3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2603 ae(filt(None, {'priority':['2','3']}, ('+','priority'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2604 ('+','status')), ['1', '4', '2', '3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2605 ae(filt(None, {}, ('+','priority'), ('+','status')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2606 ['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
2607
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
2608 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
2609 # '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
2610 # '2': '2003-01-01.00:00'
2318
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
2611 # '3': '2003-02-18'
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
2612 # '4': '2004-03-08'
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2613 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2614 for f in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2615 # ascending
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2616 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
2617 # descending
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2618 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
2619
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
2620 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
2621 # '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
2622 # '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
2623 # '3': '2003-02-18' 2 => 3
fa2f7ba34399 merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2255
diff changeset
2624 # '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
2625 ae, iiter = self.filteringSetup()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2626
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2627 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2628 # ascending
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2629 ae(filt(None, {}, ('+','deadline'), ('+','priority')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2630 ['2', '1', '3', '4'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2631 ae(filt(None, {}, ('-','deadline'), ('+','priority')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2632 ['1', '2', '4', '3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2633 # descending
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2634 ae(filt(None, {}, ('+','deadline'), ('-','priority')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2635 ['3', '4', '2', '1'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2636 ae(filt(None, {}, ('-','deadline'), ('-','priority')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2637 ['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
2638
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
2639 def testFilteringTransitiveLinkUser(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2640 ae, iiter = self.filteringSetupTransitiveSearch('user')
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2641 for f in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2642 ae(f(None, {'supervisor.username': 'ceo'}, ('+','username')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2643 ['4', '5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2644 ae(f(None, {'supervisor.supervisor.username': 'ceo'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2645 ('+','username')), ['6', '7', '8', '9', '10'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2646 ae(f(None, {'supervisor.supervisor': '3'}, ('+','username')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2647 ['6', '7', '8', '9', '10'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2648 ae(f(None, {'supervisor.supervisor.id': '3'}, ('+','username')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2649 ['6', '7', '8', '9', '10'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2650 ae(f(None, {'supervisor.username': 'grouplead1'}, ('+','username')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2651 ['6', '7'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2652 ae(f(None, {'supervisor.username': 'grouplead2'}, ('+','username')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2653 ['8', '9', '10'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2654 ae(f(None, {'supervisor.username': 'grouplead2',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2655 'supervisor.supervisor.username': 'ceo'}, ('+','username')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2656 ['8', '9', '10'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2657 ae(f(None, {'supervisor.supervisor': '3', 'supervisor': '4'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2658 ('+','username')), ['6', '7'])
3634
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
2659
5869
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2660 def testFilteringTransitiveLinkUserLimit(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2661 ae, iiter = self.filteringSetupTransitiveSearch('user')
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2662 for f in iiter():
5869
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2663 ae(f(None, {'supervisor.username': 'ceo'}, ('+','username'),
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2664 limit=1), ['4'])
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2665 ae(f(None, {'supervisor.supervisor.username': 'ceo'},
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2666 ('+','username'), limit=4), ['6', '7', '8', '9'])
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2667 ae(f(None, {'supervisor.supervisor': '3'}, ('+','username'),
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2668 limit=2, offset=2), ['8', '9'])
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2669 ae(f(None, {'supervisor.supervisor.id': '3'}, ('+','username'),
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2670 limit=3, offset=1), ['7', '8', '9'])
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2671 ae(f(None, {'supervisor.username': 'grouplead2'}, ('+','username'),
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2672 limit=2, offset=2), ['10'])
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2673 ae(f(None, {'supervisor.username': 'grouplead2',
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2674 'supervisor.supervisor.username': 'ceo'}, ('+','username'),
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2675 limit=4, offset=3), [])
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2676 ae(f(None, {'supervisor.supervisor': '3', 'supervisor': '4'},
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2677 ('+','username'), limit=1, offset=5), [])
16e1255b16cf Implement limit and offset for filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5867
diff changeset
2678
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2679 def testFilteringTransitiveLinkSort(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2680 ae, iiter = self.filteringSetupTransitiveSearch()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2681 ae, uiter = self.iterSetup('user')
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2682 # 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
2683 # 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
2684 # Leave that to a separate test.
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2685 self.db.user.set('1', supervisor = '3')
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2686 self.db.user.set('2', supervisor = '3')
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2687 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
2688 for ufilt in uiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2689 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
2690 ae(ufilt(None, {}, [('+','supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2691 ('+','supervisor.supervisor'), ('+','supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2692 ('+','username')]),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2693 ['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
2694 ae(ufilt(None, {}, [('+','supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2695 ('-','supervisor.supervisor'), ('-','supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2696 ('+','username')]),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2697 ['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
2698 for f in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2699 ae(f(None, {}, [('+','assignedto.supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2700 ('+','assignedto.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2701 ('+','assignedto.supervisor'), ('+','assignedto')]),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2702 ['1', '2', '3', '4', '5', '6', '7', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2703 ae(f(None, {}, [('+','assignedto.supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2704 ('+','assignedto.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2705 ('-','assignedto.supervisor'), ('+','assignedto')]),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2706 ['4', '5', '6', '7', '8', '1', '2', '3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2707 ae(f(None, {}, [('+','assignedto.supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2708 ('+','assignedto.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2709 ('+','assignedto.supervisor'), ('+','assignedto'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2710 ('-','status')]),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2711 ['2', '1', '3', '4', '5', '6', '8', '7'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2712 ae(f(None, {}, [('+','assignedto.supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2713 ('+','assignedto.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2714 ('+','assignedto.supervisor'), ('+','assignedto'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2715 ('+','status')]),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2716 ['1', '2', '3', '4', '5', '7', '6', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2717 ae(f(None, {}, [('+','assignedto.supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2718 ('+','assignedto.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2719 ('-','assignedto.supervisor'), ('+','assignedto'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2720 ('+','status')]), ['4', '5', '7', '6', '8', '1', '2', '3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2721 ae(f(None, {'assignedto':['6','7','8','9','10']},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2722 [('+','assignedto.supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2723 ('+','assignedto.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2724 ('-','assignedto.supervisor'), ('+','assignedto'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2725 ('+','status')]), ['4', '5', '7', '6', '8', '1', '2', '3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2726 ae(f(None, {'assignedto':['6','7','8','9']},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2727 [('+','assignedto.supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2728 ('+','assignedto.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2729 ('-','assignedto.supervisor'), ('+','assignedto'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2730 ('+','status')]), ['4', '5', '1', '2', '3'])
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2731
3685
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
2732 def testFilteringTransitiveLinkSortNull(self):
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
2733 """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
2734 ae, iiter = self.filteringSetupTransitiveSearch()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2735 ae, uiter = self.iterSetup('user')
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2736 for ufilt in uiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2737 ae(ufilt(None, {}, [('+','supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2738 ('+','supervisor.supervisor'), ('+','supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2739 ('+','username')]),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2740 ['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
2741 ae(ufilt(None, {}, [('+','supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2742 ('-','supervisor.supervisor'), ('-','supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2743 ('+','username')]),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2744 ['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
2745 for f in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2746 ae(f(None, {}, [('+','assignedto.supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2747 ('+','assignedto.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2748 ('+','assignedto.supervisor'), ('+','assignedto')]),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2749 ['1', '2', '3', '4', '5', '6', '7', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2750 ae(f(None, {}, [('+','assignedto.supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2751 ('+','assignedto.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2752 ('-','assignedto.supervisor'), ('+','assignedto')]),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2753 ['4', '5', '6', '7', '8', '1', '2', '3'])
3685
4d9adb8bc3b1 Null-value sorting fixes:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3684
diff changeset
2754
3634
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
2755 def testFilteringTransitiveLinkIssue(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2756 ae, iiter = self.filteringSetupTransitiveSearch()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2757 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2758 ae(filt(None, {'assignedto.supervisor.username': 'grouplead1'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2759 ('+','id')), ['1', '2', '3'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2760 ae(filt(None, {'assignedto.supervisor.username': 'grouplead2'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2761 ('+','id')), ['4', '5', '6', '7', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2762 ae(filt(None, {'assignedto.supervisor.username': 'grouplead2',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2763 'status': '1'}, ('+','id')), ['4', '6', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2764 ae(filt(None, {'assignedto.supervisor.username': 'grouplead2',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2765 'status': '2'}, ('+','id')), ['5', '7'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2766 ae(filt(None, {'assignedto.supervisor.username': ['grouplead2'],
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2767 'status': '2'}, ('+','id')), ['5', '7'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2768 ae(filt(None, {'assignedto.supervisor': ['4', '5'], 'status': '2'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2769 ('+','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
2770
57c66056ffe4 Implemented what I'll call for now "transitive searching"...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3601
diff changeset
2771 def testFilteringTransitiveMultilink(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2772 ae, iiter = self.filteringSetupTransitiveSearch()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2773 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2774 ae(filt(None, {'messages.author.username': 'grouplead1'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2775 ('+','id')), [])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2776 ae(filt(None, {'messages.author': '6'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2777 ('+','id')), ['1', '2'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2778 ae(filt(None, {'messages.author.id': '6'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2779 ('+','id')), ['1', '2'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2780 ae(filt(None, {'messages.author.username': 'worker1'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2781 ('+','id')), ['1', '2'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2782 ae(filt(None, {'messages.author': '10'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2783 ('+','id')), ['6', '7', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2784 ae(filt(None, {'messages.author': '9'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2785 ('+','id')), ['5', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2786 ae(filt(None, {'messages.author': ['9', '10']},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2787 ('+','id')), ['5', '6', '7', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2788 ae(filt(None, {'messages.author': ['8', '9']},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2789 ('+','id')), ['4', '5', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2790 ae(filt(None, {'messages.author': ['8', '9'], 'status' : '1'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2791 ('+','id')), ['4', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2792 ae(filt(None, {'messages.author': ['8', '9'], 'status' : '2'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2793 ('+','id')), ['5'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2794 ae(filt(None, {'messages.author': ['8', '9', '10'],
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2795 '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
2796 ['6', '7', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2797 ae(filt(None, {'nosy.supervisor.username': 'ceo'},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2798 ('+','id')), ['1', '2'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2799 ae(filt(None, {'messages.author': ['6', '9']},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2800 ('+','id')), ['1', '2', '5', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2801 ae(filt(None, {'messages': ['5', '7']},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2802 ('+','id')), ['3', '5', '8'])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2803 ae(filt(None, {'messages.author': ['6', '9'],
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2804 '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
2805
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2806 def testFilteringTransitiveMultilinkSort(self):
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2807 # 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
2808 # 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
2809 ae, iiter = self.filteringSetupTransitiveSearch()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2810 for filt in iiter():
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2811 if filt.__name__ != 'filter':
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2812 continue
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2813 ae(filt(None, {}, [('+','messages.author')]),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2814 ['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
2815 ae(filt(None, {}, [('-','messages.author')]),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2816 ['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
2817 ae(filt(None, {}, [('+','messages.date')]),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2818 ['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
2819 ae(filt(None, {}, [('-','messages.date')]),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2820 ['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
2821 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
2822 ['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
2823 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
2824 ['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
2825 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
2826 ['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
2827 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
2828 ['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
2829 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
2830 ['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
2831 ae(filt(None, {}, [('+','messages.author'),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2832 ('-','assignedto.supervisor'),('-','assignedto')]),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2833 ['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
2834 ae(filt(None, {},
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2835 [('+','messages.author.supervisor.supervisor.supervisor'),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2836 ('+','messages.author.supervisor.supervisor'),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2837 ('+','messages.author.supervisor'), ('+','messages.author')]),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2838 ['1', '2', '3', '4', '5', '6', '7', '8'])
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2839 self.db.user.setorderprop('age')
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2840 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
2841 for filt in iiter():
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2842 if filt.__name__ != 'filter':
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2843 continue
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2844 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
2845 ['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
2846 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
2847 ['6', '7', '8', '5', '4', '3', '1', '2'])
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2848 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
2849 for filt in iiter():
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2850 if filt.__name__ != 'filter':
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2851 continue
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2852 # Orderprop is a Link/Multilink:
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2853 # 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
2854 # 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
2855 ae(filt(None, {}, [('+','messages')]),
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2856 ['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
2857 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
2858 ['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
2859 # The following will sort by
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2860 # 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
2861 # author.username
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2862 # 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
2863 # 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
2864 # 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
2865 # 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
2866 # 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
2867 # 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
2868 # 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
2869 # 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
2870 # 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
2871 # 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
2872 # 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
2873 # 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
2874 # 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
2875 # 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
2876 # 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
2877 # issue 8: messages 7,8 sortkey:[[grouplead2, grouplead2], ...]
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2878 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
2879 for filt in iiter():
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2880 if filt.__name__ != 'filter':
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2881 continue
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2882 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
2883 ['3', '1', '2', '6', '7', '5', '4', '8'])
3682
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2884
193f316dbbe9 More transitive-property support.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3681
diff changeset
2885 def testFilteringSortId(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2886 ae, iiter = self.filteringSetupTransitiveSearch('user')
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2887 for filt in iiter():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2888 ae(filt(None, {}, ('+','id')),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
2889 ['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
2890
5318
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2891 def testFilteringRetiredString(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2892 ae, iiter = self.filteringSetup()
5318
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2893 self.db.issue.retire('1')
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2894 self.db.commit()
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2895 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
2896 , True: (['1'], ['1'], ['1'], ['1'], [])
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2897 , False: ([], [], [], ['2', '3'], [])
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2898 }
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
2899 for filt in iiter():
5318
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2900 for retire in True, False, None:
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2901 ae(filt(None, {'title': ['one']}, ('+','id'),
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2902 retired=retire), r[retire][0])
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2903 ae(filt(None, {'title': ['issue one']}, ('+','id'),
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2904 retired=retire), r[retire][1])
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2905 ae(filt(None, {'title': ['issue', 'one']}, ('+','id'),
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2906 retired=retire), r[retire][2])
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2907 ae(filt(None, {'title': ['issue']}, ('+','id'),
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2908 retired=retire), r[retire][3])
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2909 ae(filt(None, {'title': ['one', 'two']}, ('+','id'),
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2910 retired=retire), r[retire][4])
506c7ee9a385 Add a 'retired' parameter to Class.filter
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5317
diff changeset
2911
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2912 # XXX add sorting tests for other types
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2913
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2914 # nuke and re-create db for restore
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2915 def nukeAndCreate(self):
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2916 # shut down this db and nuke it
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2917 self.db.close()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2918 self.nuke_database()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2919
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2920 # open a new, empty database
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2921 os.makedirs(config.DATABASE + '/files')
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2922 self.db = self.module.Database(config, 'admin')
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2923 setupSchema(self.db, 0, self.module)
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
2924
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
2925 def testImportExport(self):
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
2926 # 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
2927 ae, dummy = self.filteringSetup()
3826
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2928 # 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
2929 # journal data:
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2930 self.db.user.set('4', password = password.Password('xyzzy'))
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2931 self.db.user.set('4', age = 3)
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2932 self.db.user.set('4', assignable = True)
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2933 self.db.issue.set('1', title = 'i1', status = '3')
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2934 self.db.issue.set('1', deadline = date.Date('2007'))
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2935 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
2936 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
2937 self.db.commit()
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2938 self.db.user.set('4', password = password.Password('123xyzzy'))
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2939 self.db.user.set('4', assignable = False)
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2940 self.db.priority.set(p, order = '4711')
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2941 self.db.commit()
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2942
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
2943 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
2944 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
2945
6431
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2946 # Key fields must be unique. There can only be one unretired
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2947 # object with a given key value. When importing verify that
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2948 # having the unretired object with a key value before a retired
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2949 # object with the same key value is handled properly.
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2950
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2951 # Since the order of the exported objects is not consistant
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2952 # across backends, we sort the objects by id (as an int) and
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2953 # make sure that the active (non-retired) entry sorts before
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2954 # the retired entry.
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2955 active_dupe_id = self.db.user.create(username="duplicate",
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2956 roles='User',
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2957 password=password.Password('sekrit'), address='dupe1@example.com')
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2958 self.db.user.retire(active_dupe_id) # allow us to create second dupe
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2959
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2960 retired_dupe_id = self.db.user.create(username="duplicate",
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2961 roles='User',
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2962 password=password.Password('sekrit'), address='dupe2@example.com')
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2963 self.db.user.retire(retired_dupe_id)
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2964 self.db.user.restore(active_dupe_id) # unretire lower numbered id
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2965 self.db.commit()
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2966
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
2967 # 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
2968 orig = {}
3826
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2969 origj = {}
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
2970 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
2971 cl = orig[cn] = {}
3826
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2972 jn = origj[cn] = {}
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
2973 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
2974 it = cl[id] = {}
3826
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
2975 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
2976 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
2977 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
2978
2496
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2979 os.mkdir('_test_export')
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2980 try:
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2981 # grab the export
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2982 export = {}
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2983 journals = {}
6431
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2984 active_dupe_id_first = -1 # -1 unknown, False or True
2496
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2985 for cn,klass in self.db.classes.items():
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2986 names = klass.export_propnames()
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
2987 cl = export[cn] = [names+['is retired']]
6431
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2988 classname = klass.classname
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2989 nodeids = klass.getnodeids()
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2990 # sort to enforce retired/unretired order
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2991 nodeids.sort(key=int)
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2992 for id in nodeids:
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2993 if (classname == 'user' and
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2994 id == retired_dupe_id and
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2995 active_dupe_id_first == -1):
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2996 active_dupe_id_first = False
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2997 if (classname == 'user' and
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2998 id == active_dupe_id and
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
2999 active_dupe_id_first == -1):
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3000 active_dupe_id_first = True
2496
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
3001 cl.append(klass.export_list(names, id))
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
3002 if hasattr(klass, 'export_files'):
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
3003 klass.export_files('_test_export', id)
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
3004 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
3005
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3006 self.nukeAndCreate()
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
3007
6431
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3008 if not active_dupe_id_first:
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3009 # verify that the test is configured properly to
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3010 # trigger the exception code to handle uniqueness
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3011 # failure.
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3012 self.fail("Setup failure: active user id not first.")
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3013
2496
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
3014 # import
6431
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3015 with self._caplog.at_level(logging.INFO,
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3016 logger="roundup.hyperdb.backend"):
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3017 # not supported in python2, so use caplog rather than len(log)
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3018 # X in log[0] ...
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3019 # with self.assertLogs('roundup.hyperdb.backend',
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3020 # level="INFO") as log:
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3021 for cn, items in export.items():
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3022 klass = self.db.classes[cn]
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3023 names = items[0]
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3024 maxid = 1
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3025 for itemprops in items[1:]:
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3026 id = int(klass.import_list(names, itemprops))
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3027 if hasattr(klass, 'import_files'):
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3028 klass.import_files('_test_export', str(id))
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3029 maxid = max(maxid, id)
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3030 self.db.setid(cn, str(maxid+1))
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3031 klass.import_journals(journals[cn])
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3032
6432
97a45bfa62a8 issue2551142 - Import of retired node ... fails with unique constraint
John Rouillard <rouilj@ieee.org>
parents: 6431
diff changeset
3033 if self.db.dbtype not in ['anydbm', 'memorydb']:
6431
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3034 # no logs or fixup needed under anydbm
6433
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
3035 # postgres requires commits and rollbacks
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
3036 # as part of error recovery, so we get commit
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
3037 # logging that we need to account for
6434
269f39e28d5c issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6433
diff changeset
3038 log = []
6433
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
3039 if self.db.dbtype == 'postgres':
6434
269f39e28d5c issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6433
diff changeset
3040 # remove commit and rollback log messages
269f39e28d5c issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6433
diff changeset
3041 # so the indexes below work correctly.
269f39e28d5c issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6433
diff changeset
3042 for i in range(0,len(self._caplog.record_tuples)):
269f39e28d5c issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6433
diff changeset
3043 if self._caplog.record_tuples[i][2] not in \
269f39e28d5c issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6433
diff changeset
3044 ["commit", "rollback"]:
269f39e28d5c issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6433
diff changeset
3045 log.append(self._caplog.record_tuples[i])
6433
c1d3fbcdbfbd issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6432
diff changeset
3046 else:
6434
269f39e28d5c issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6433
diff changeset
3047 log = self._caplog.record_tuples[:]
269f39e28d5c issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6433
diff changeset
3048
269f39e28d5c issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6433
diff changeset
3049 log_count=2
269f39e28d5c issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6433
diff changeset
3050 handle_msg_location=0
269f39e28d5c issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6433
diff changeset
3051 success_msg_location = handle_msg_location+1
269f39e28d5c issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6433
diff changeset
3052
269f39e28d5c issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6433
diff changeset
3053 self.assertEqual(log_count, len(log))
6431
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3054 self.assertIn('Attempting to handle import exception for id 7:',
6434
269f39e28d5c issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6433
diff changeset
3055 log[handle_msg_location][2])
6431
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3056 self.assertIn('Successfully handled import exception for id 7 '
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3057 'which conflicted with 6',
6434
269f39e28d5c issue2551142 - Import of retired node ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6433
diff changeset
3058 log[success_msg_location][2])
6431
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3059
3826
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
3060 # 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
3061 self.db.commit()
7666
027912a59f49 test: add explicit check for imported data.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
3062
027912a59f49 test: add explicit check for imported data.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
3063 self.assertEqual(self.db.user.lookup("duplicate"), active_dupe_id)
7668
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7666
diff changeset
3064 self.assertEqual(self.db.user.is_retired(retired_dupe_id), True)
7666
027912a59f49 test: add explicit check for imported data.
John Rouillard <rouilj@ieee.org>
parents: 7582
diff changeset
3065
2496
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
3066 finally:
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
3067 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
3068
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
3069 # 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
3070 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
3071 klass = self.db.classes[cn]
2102
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
3072 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
3073 # 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
3074 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
3075 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
3076 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
3077 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
3078 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
3079 l = klass.get(id, name)
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
3080 if isinstance(value, type([])):
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
3081 value.sort()
93f03c6714d8 A few big changes in this commit:
Richard Jones <richard@users.sourceforge.net>
parents: 2082
diff changeset
3082 l.sort()
2102
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
3083 try:
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
3084 ae(l, value)
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
3085 except AssertionError:
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
3086 if not isinstance(propdefs[name], Date):
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
3087 raise
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
3088 # don't get hung up on rounding errors
666402433998 Fix some tests.
Richard Jones <richard@users.sourceforge.net>
parents: 2098
diff changeset
3089 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
3090 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
3091 for id, oj in items.items():
3826
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
3092 rj = self.db.getjournal(jc, id)
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
3093 # Both mysql and postgresql have some minor issues with
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
3094 # rounded seconds on export/import, so we compare only
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
3095 # the integer part.
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
3096 for j in oj:
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
3097 j[1].second = float(int(j[1].second))
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
3098 for j in rj:
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
3099 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
3100 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
3101 rj.sort(key = NoneAndDictComparable)
3826
bf2e9535da00 Journal and database testing.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3822
diff changeset
3102 ae(oj, rj)
1920
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
3103
f9316d2cd5ba Fixed retirement of items in rdbms imports [SF#841355]
Richard Jones <richard@users.sourceforge.net>
parents: 1912
diff changeset
3104 # 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
3105 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
3106 ae(self.db.issue.get('2', 'title'), 'issue two')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3107
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
3108 # 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
3109 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
3110 newid = int(self.db.user.create(username='testing'))
6431
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6427
diff changeset
3111 self.assertGreater(newid, maxid)
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
3112
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3113 # test import/export via admin interface
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3114 def testAdminImportExport(self):
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3115 import roundup.admin
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3116 import csv
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3117 # 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
3118 ae, dummy = self.filteringSetup()
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3119 # create large field
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3120 self.db.priority.create(name = 'X' * 500)
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3121 self.db.config.CSV_FIELD_SIZE = 400
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3122 self.db.commit()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3123 output = []
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3124 # 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
3125 # 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
3126 # 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
3127 # case)
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3128 def stderrwrite(s):
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3129 output.append(s)
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3130 roundup.admin.sys = MockNull ()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3131 try:
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3132 roundup.admin.sys.stderr.write = stderrwrite
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3133 tool = roundup.admin.AdminTool()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3134 home = '.'
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3135 tool.tracker_home = home
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3136 tool.db = self.db
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3137 tool.verbose = False
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3138 tool.do_export (['_test_export'])
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3139 self.assertEqual(len(output), 2)
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3140 self.assertEqual(output [1], '\n')
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
3141 self.assertTrue(output [0].startswith
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3142 ('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
3143 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
3144
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3145 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
3146 self.nukeAndCreate()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3147 self.db.config.CSV_FIELD_SIZE = 400
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3148 tool = roundup.admin.AdminTool()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3149 tool.tracker_home = home
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3150 tool.db = self.db
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3151 tool.verbose = False
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3152 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
3153
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3154 self.nukeAndCreate()
7668
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7666
diff changeset
3155
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7666
diff changeset
3156 # make sure we have an empty db
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7666
diff changeset
3157 with self.assertRaises(IndexError) as e:
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7666
diff changeset
3158 # users 1 and 2 always are created on schema load.
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7666
diff changeset
3159 # so don't use them.
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7666
diff changeset
3160 self.db.user.getnode("5").values()
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7666
diff changeset
3161
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3162 self.db.config.CSV_FIELD_SIZE = 3200
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3163 tool = roundup.admin.AdminTool()
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3164 tool.tracker_home = home
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3165 tool.db = self.db
7668
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7666
diff changeset
3166 # Force import code to commit when more than 5
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7666
diff changeset
3167 # savepoints have been created.
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7666
diff changeset
3168 tool.settings['savepoint_limit'] = 5
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3169 tool.verbose = False
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3170 tool.do_import(['_test_export'])
7668
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7666
diff changeset
3171
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7666
diff changeset
3172 # verify the data is loaded.
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7666
diff changeset
3173 self.db.user.getnode("5").values()
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3174 finally:
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3175 roundup.admin.sys = sys
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3176 shutil.rmtree('_test_export')
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4102
diff changeset
3177
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3178 # 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
3179 def testAdminOtherCommands(self):
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3180 import roundup.admin
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3181
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3182 # 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
3183 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
3184 # create large field
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3185 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
3186 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
3187 self.db.commit()
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3188
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3189 eoutput = [] # stderr output
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3190 soutput = [] # stdout output
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3191
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3192 def stderrwrite(s):
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3193 eoutput.append(s)
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3194 def stdoutwrite(s):
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3195 soutput.append(s)
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3196 roundup.admin.sys = MockNull ()
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3197 try:
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3198 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
3199 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
3200
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3201 tool = roundup.admin.AdminTool()
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3202 home = '.'
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3203 tool.tracker_home = home
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3204 tool.db = self.db
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3205 tool.verbose = False
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3206 tool.separator = "\n"
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3207 tool.print_designator = True
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3208
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3209 # test props_from_args
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3210 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
3211
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3212 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
3213
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3214 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
3215 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
3216
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3217 # test get_class()
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3218 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
3219
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3220 # 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
3221 # 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
3222 # FIXME there should be some test here
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
3223
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3224 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
3225 self.assertEqual(sorted (soutput),
6394
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
3226 ['assignedto: <roundup.hyperdb.Link to "user">\n',
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
3227 'deadline: <roundup.hyperdb.Date>\n',
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
3228 'feedback: <roundup.hyperdb.Link to "msg">\n',
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
3229 'files: <roundup.hyperdb.Multilink to "file">\n',
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
3230 'foo: <roundup.hyperdb.Interval>\n',
6403
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
3231 'keywords2: <roundup.hyperdb.Multilink to "keyword">\n',
6394
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
3232 'keywords: <roundup.hyperdb.Multilink to "keyword">\n',
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
3233 'messages: <roundup.hyperdb.Multilink to "msg">\n',
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
3234 'nosy: <roundup.hyperdb.Multilink to "user">\n',
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
3235 'priority: <roundup.hyperdb.Link to "priority">\n',
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
3236 'spam: <roundup.hyperdb.Multilink to "msg">\n',
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
3237 'status: <roundup.hyperdb.Link to "status">\n',
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
3238 'superseder: <roundup.hyperdb.Multilink to "issue">\n',
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
3239 '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
3240
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3241 #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
3242 #tool.print_designator = False
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3243 #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
3244
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3245 # test do_create
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3246 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
3247 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
3248 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
3249 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
3250 # verify nosy setting
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3251 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
3252 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
3253
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3254 # 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
3255 # 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
3256 # verifies issue2550572
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3257 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
3258 # verify proper result
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3259 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
3260 self.assertEqual(props, ['1'])
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3261 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
3262 self.assertEqual(props, ['2'])
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3263
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3264 # 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
3265 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
3266 tool.usage(message="Hello World")
5788
28141c7dfc19 Replace depricated assertEquals with assertEqual failUnless with asserTrue.
John Rouillard <rouilj@ieee.org>
parents: 5753
diff changeset
3267 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
3268
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3269 # check security output
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3270 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
3271 tool.do_security("Admin")
6013
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3272 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
3273 '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
3274 'Role "admin":\n',
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3275 ' User may create everything (Create)\n',
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3276 ' User may edit everything (Edit)\n',
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3277 ' User may restore everything (Restore)\n',
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3278 ' User may retire everything (Retire)\n',
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3279 ' User may view everything (View)\n',
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3280 ' 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
3281 ' 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
3282 ' 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
3283 ' 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
3284 ' 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
3285 'Role "anonymous":\n', 'Role "user":\n',
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3286 ' 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
3287 ' 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
3288
491fdb189a12 Restructure test code. Assign expected value to variable.
John Rouillard <rouilj@ieee.org>
parents: 5880
diff changeset
3289 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
3290
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3291
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3292 self.nukeAndCreate()
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3293 tool = roundup.admin.AdminTool()
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3294 tool.tracker_home = home
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3295 tool.db = self.db
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3296 tool.verbose = False
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3297 finally:
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3298 roundup.admin.sys = sys
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5067
diff changeset
3299
5163
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3300
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3301 # 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
3302 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
3303 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
3304 output = []
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3305 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
3306 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
3307 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
3308 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
3309 try:
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3310 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
3311 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
3312 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
3313 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
3314 '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
3315 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
3316 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
3317 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
3318 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
3319 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
3320 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
3321 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
3322 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
3323 finally:
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5139
diff changeset
3324 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
3325 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
3326 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
3327
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
3328 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
3329 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
3330 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
3331
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
3332 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
3333 # 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
3334 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
3335 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
3336 keys = sorted(props.keys())
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
3337 self.assertEqual(keys, ['activity', 'actor', 'assignedto', 'creation',
6394
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
3338 'creator', 'deadline', 'feedback', 'files', 'fixer', 'foo',
6403
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
3339 'id', 'keywords', 'keywords2', 'messages', 'nosy', 'priority',
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
3340 '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
3341 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
3342
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
3343 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
3344 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
3345 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
3346
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
3347 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
3348 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
3349 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
3350 keys = sorted(props.keys())
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
3351 self.assertEqual(keys, ['activity', 'actor', 'assignedto', 'creation',
6394
495fd3033280 Add test for multilink expression feature
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6366
diff changeset
3352 'creator', 'deadline', 'feedback', 'files', 'foo', 'id',
6403
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
3353 'keywords', 'keywords2', 'messages', 'nosy', 'priority', 'spam',
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
3354 '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
3355 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
3356
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
3357 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
3358 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
3359 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
3360
767ff2a03eee more unit tests to improve coverage (up from 85% to 88% for anydbm! :)
Richard Jones <richard@users.sourceforge.net>
parents: 1929
diff changeset
3361 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
3362 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
3363 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
3364 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
3365 keys = sorted(props.keys())
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
3366 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
3367 'creator', 'deadline', 'feedback', 'files', 'fixer', 'foo', 'id',
6403
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
3368 'keywords', 'keywords2', 'messages', 'nosy', 'priority', 'spam',
9957d8d10783 Tests and bug-fix for issue2551119
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6402
diff changeset
3369 '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
3370 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
3371
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
3372 def testNosyMail(self) :
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
3373 """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
3374 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
3375 """
4407
f6a2bfd351ee force tests checking text output to work in the "C" locale
Richard Jones <richard@users.sourceforge.net>
parents: 4365
diff changeset
3376 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
3377 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
3378 db = self.db
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
3379 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
3380 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
3381 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
3382 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
3383 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
3384 try :
5493
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3385 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
3386 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
3387 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
3388 files = [f1, f2])
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
3389 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
3390 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
3391
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
3392 db.issue.nosymessage(i, m, {})
4102
dcca66d56815 fix unit test compatibility
Richard Jones <richard@users.sourceforge.net>
parents: 4089
diff changeset
3393 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
3394 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
3395 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
3396 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
3397 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
3398 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
3399 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
3400 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
3401 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
3402 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
3403 finally :
4407
f6a2bfd351ee force tests checking text output to work in the "C" locale
Richard Jones <richard@users.sourceforge.net>
parents: 4365
diff changeset
3404 roundupdb._ = old_translate_
3882
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
3405 Mailer.smtp_send = backup
46ef2a6fd79d config option to limit nosy attachments based on size
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3872
diff changeset
3406
5493
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3407 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
3408 """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
3409 """
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3410 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
3411 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
3412 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
3413 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
3414 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
3415 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
3416 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
3417 try :
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3418 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
3419 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
3420 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
3421 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
3422 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
3423 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
3424
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3425 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
3426 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
3427 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
3428 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
3429 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
3430 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
3431 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
3432 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
3433 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
3434 finally :
725266c03eab updated mailgw to no longer use mimetools based on jerrykan's patch
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5492
diff changeset
3435 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
3436 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
3437
5494
b7fa56ced601 use gpg module instead of pyme module for PGP encryption
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5493
diff changeset
3438 @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
3439 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
3440 """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
3441 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
3442 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
3443 """
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3444 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
3445 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
3446 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
3447 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
3448 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
3449 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
3450 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
3451 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
3452 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
3453 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
3454 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
3455 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
3456 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
3457 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
3458 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
3459 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
3460 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
3461 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
3462 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
3463 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
3464 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
3465 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
3466
46239c21a1eb Sending of PGP-Encrypted mail to all users or selected users (via roles)...
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4490
diff changeset
3467 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
3468 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
3469 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
3470 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
3471 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
3472 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
3473 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
3474 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
3475 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
3476 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
3477 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
3478 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
3479 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
3480 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
3481 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
3482 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
3483 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
3484 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
3485 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
3486 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
3487 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
3488 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
3489 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
3490 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
3491 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
3492 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
3493 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
3494 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
3495 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
3496 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
3497 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
3498 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
3499 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
3500 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
3501 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
3502 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
3503
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3504 class ROTest(MyTestCase):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3505 def setUp(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3506 # remove previous test, ignore errors
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3507 if os.path.exists(config.DATABASE):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3508 shutil.rmtree(config.DATABASE)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3509 os.makedirs(config.DATABASE + '/files')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3510 self.db = self.module.Database(config, 'admin')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3511 setupSchema(self.db, 1, self.module)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3512 self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3513
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3514 self.db = self.module.Database(config)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3515 setupSchema(self.db, 0, self.module)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3516
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3517 def testExceptions(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3518 # this tests the exceptions that should be raised
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3519 ar = self.assertRaises
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3520
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3521 # this tests the exceptions that should be raised
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3522 ar(DatabaseError, self.db.status.create, name="foo")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3523 ar(DatabaseError, self.db.status.set, '1', name="foo")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3524 ar(DatabaseError, self.db.status.retire, '1')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3525
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3526
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3527 class SchemaTest(MyTestCase):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3528 def setUp(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3529 # remove previous test, ignore errors
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3530 if os.path.exists(config.DATABASE):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3531 shutil.rmtree(config.DATABASE)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3532 os.makedirs(config.DATABASE + '/files')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3533
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
3534 def test_reservedProperties(self):
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
3535 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
3536 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
3537 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
3538 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
3539 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
3540 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
3541 creator=String())
2077
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
3542 self.assertRaises(ValueError, self.module.Class, self.db, "a",
3e0961d6d44d Added the "actor" property.
Richard Jones <richard@users.sourceforge.net>
parents: 2075
diff changeset
3543 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
3544
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3545 def init_a(self):
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
3546 self.open_database()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3547 a = self.module.Class(self.db, "a", name=String())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3548 a.setkey("name")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3549 self.db.post_init()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3550
3601
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
3551 def test_fileClassProps(self):
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
3552 self.open_database()
3601
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
3553 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
3554 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
3555 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
3556 'creation', 'type'])
7b25567f0f54 indexing may be turned off for FileClass "content" now
Richard Jones <richard@users.sourceforge.net>
parents: 3586
diff changeset
3557
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3558 def init_ab(self):
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
3559 self.open_database()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3560 a = self.module.Class(self.db, "a", name=String())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3561 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
3562 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
3563 fooz=Multilink('a'))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3564 b.setkey("name")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3565 self.db.post_init()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3566
6238
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3567 def test_splitDesignator(self):
6240
0c3def4b5275 Check for DesignatorError rather than ValueError
John Rouillard <rouilj@ieee.org>
parents: 6239
diff changeset
3568 from roundup.hyperdb import splitDesignator, DesignatorError
6238
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3569
6242
b14359503b49 Try to remove errors from postgres/mysql
John Rouillard <rouilj@ieee.org>
parents: 6240
diff changeset
3570 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
3571
6238
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3572 valid_test_cases = [('zip2py44', ('zip2py', '44')),
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3573 ('zippy2', ('zippy', '2')),
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3574 ('a9', ('a', '9')),
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3575 ('a1234', ('a', '1234')),
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3576 ('a_1234', ('a_', '1234')),
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3577 ]
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3578
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3579 invalid_test_cases = ['_zip2py44','1zippy44',
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3580 'zippy244a' ]
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3581
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3582 for designator in valid_test_cases:
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3583 print("Testing %s"%designator[0])
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3584 self.assertEqual(splitDesignator(designator[0]), designator[1])
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3585
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3586 for designator in invalid_test_cases:
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3587 print("Testing %s"%designator)
6240
0c3def4b5275 Check for DesignatorError rather than ValueError
John Rouillard <rouilj@ieee.org>
parents: 6239
diff changeset
3588 with self.assertRaises(DesignatorError) as ctx:
6238
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3589 splitDesignator(designator)
6239
d3878ac549e9 Fix splitDesignator test.
John Rouillard <rouilj@ieee.org>
parents: 6238
diff changeset
3590 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
3591 self.assertEqual(str(ctx.exception), error)
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3592
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3593
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3594 def test_addNewClass(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3595 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
3596
6238
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3597 with self.assertRaises(ValueError) as ctx:
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3598 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
3599 error = 'Class "a" already defined.'
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3600 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
3601
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3602 aid = self.db.a.create(name='apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3603 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3604
6238
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3605 # Test permutations of valid/invalid classnames
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3606 self.init_a()
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3607
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3608 for classname in [ "1badclassname", "badclassname1",
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3609 "_badclassname", "_", "5" ]:
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3610 print("testing %s\n" % classname)
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3611 with self.assertRaises(ValueError) as ctx:
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3612 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
3613
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3614 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
3615 '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
3616 '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
3617 self.assertEqual(str(ctx.exception), error)
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3618
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3619 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
3620 'class2_' ]:
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3621 print("testing %s\n" % classname)
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3622 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
3623 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
3624
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3625 # 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
3626 # 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
3627 self.db.close()
6834bb5473da Summary: Constrain format of classname and document
John Rouillard <rouilj@ieee.org>
parents: 6179
diff changeset
3628
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3629 # 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
3630 # (and existence of old ones)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3631 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
3632 bid = self.db.b.create(name='bear', fooz=[aid])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3633 self.assertEqual(self.db.a.get(aid, 'name'), 'apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3634 self.db.commit()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3635 self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3636
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3637 # now check we can recall the added class' items
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3638 self.init_ab()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3639 self.assertEqual(self.db.a.get(aid, 'name'), 'apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3640 self.assertEqual(self.db.a.lookup('apple'), aid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3641 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
3642 self.assertEqual(self.db.b.get(bid, 'fooz'), [aid])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3643 self.assertEqual(self.db.b.lookup('bear'), bid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3644
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3645 # confirm journal's ok
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3646 self.db.getjournal('a', aid)
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3647 self.db.getjournal('b', bid)
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3648
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3649 def init_amod(self):
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
3650 self.open_database()
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
3651 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
3652 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
3653 newdate=Date())
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3654 a.setkey("name")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3655 b = self.module.Class(self.db, "b", name=String())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3656 b.setkey("name")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3657 self.db.post_init()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3658
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3659 def test_modifyClass(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3660 self.init_ab()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3661
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3662 # add item to user and issue class
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3663 aid = self.db.a.create(name='apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3664 bid = self.db.b.create(name='bear')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3665 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3666
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3667 # modify "a" schema
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3668 self.init_amod()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3669 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
3670 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
3671 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
3672 # 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
3673 # 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
3674 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
3675 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
3676 self.assertEqual(self.db.a.get(aid, 'newdate'), None)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3677 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
3678 aid2 = self.db.a.create(name='aardvark', newstr='booz')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3679 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3680
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3681 # test
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3682 self.init_amod()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3683 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
3684 self.assertEqual(self.db.a.get(aid, 'newstr'), None)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3685 self.assertEqual(self.db.b.get(aid, 'name'), 'bear')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3686 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
3687 self.assertEqual(self.db.a.get(aid2, 'newstr'), 'booz')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3688
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3689 # confirm journal's ok
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3690 self.db.getjournal('a', aid)
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3691 self.db.getjournal('a', aid2)
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3692
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3693 def init_amodkey(self):
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
3694 self.open_database()
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
3695 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
3696 a.setkey("newstr")
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3697 b = self.module.Class(self.db, "b", name=String())
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3698 b.setkey("name")
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3699 self.db.post_init()
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 def test_changeClassKey(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3702 self.init_amod()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3703 aid = self.db.a.create(name='apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3704 self.assertEqual(self.db.a.lookup('apple'), aid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3705 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3706
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
3707 # change the key to newstr on a
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3708 self.init_amodkey()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3709 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
3710 self.assertEqual(self.db.a.get(aid, 'newstr'), None)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3711 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
3712 aid2 = self.db.a.create(name='aardvark', newstr='booz')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3713 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3714
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3715 # check
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3716 self.init_amodkey()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3717 self.assertEqual(self.db.a.lookup('booz'), aid2)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3718
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3719 # confirm journal's ok
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3720 self.db.getjournal('a', aid)
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3721
3554
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
3722 def test_removeClassKey(self):
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
3723 self.init_amod()
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
3724 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
3725 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
3726 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
3727
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
3728 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
3729 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
3730 self.db.post_init()
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
3731
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
3732 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
3733 self.db.commit()
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
3734
5e70726a86dd fixed schema migration problem when Class keys were removed
Richard Jones <richard@users.sourceforge.net>
parents: 3547
diff changeset
3735
2198
41a73b06d2ee *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2197
diff changeset
3736 def init_amodml(self):
4349
f0faef4dd023 Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents: 4347
diff changeset
3737 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
3738 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
3739 newml=Multilink('a'))
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3740 a.setkey('name')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3741 self.db.post_init()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3742
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3743 def test_makeNewMultilink(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3744 self.init_a()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3745 aid = self.db.a.create(name='apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3746 self.assertEqual(self.db.a.lookup('apple'), aid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3747 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3748
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3749 # add a multilink prop
2198
41a73b06d2ee *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2197
diff changeset
3750 self.init_amodml()
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
3751 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
3752 self.assertEqual(self.db.a.find(newml=aid), [bid])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3753 self.assertEqual(self.db.a.lookup('apple'), aid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3754 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3755
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3756 # check
2198
41a73b06d2ee *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2197
diff changeset
3757 self.init_amodml()
2727
93e2e5b55a3c new Interval props weren't created properly in rdbms
Richard Jones <richard@users.sourceforge.net>
parents: 2695
diff changeset
3758 self.assertEqual(self.db.a.find(newml=aid), [bid])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3759 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
3760 self.assertEqual(self.db.a.lookup('bear'), bid)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3761
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3762 # confirm journal's ok
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3763 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
3764 self.db.getjournal('a', bid)
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3765
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3766 def test_removeMultilink(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3767 # add a multilink prop
2198
41a73b06d2ee *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2197
diff changeset
3768 self.init_amodml()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3769 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
3770 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
3771 self.assertEqual(self.db.a.find(newml=aid), [bid])
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3772 self.assertEqual(self.db.a.lookup('apple'), aid)
2197
Richard Jones <richard@users.sourceforge.net>
parents: 2196
diff changeset
3773 self.assertEqual(self.db.a.lookup('bear'), bid)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3774 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3775
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3776 # remove the multilink
2197
Richard Jones <richard@users.sourceforge.net>
parents: 2196
diff changeset
3777 self.init_a()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3778 self.assertEqual(self.db.a.lookup('apple'), aid)
2197
Richard Jones <richard@users.sourceforge.net>
parents: 2196
diff changeset
3779 self.assertEqual(self.db.a.lookup('bear'), bid)
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3780
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3781 # confirm journal's ok
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3782 self.db.getjournal('a', aid)
2197
Richard Jones <richard@users.sourceforge.net>
parents: 2196
diff changeset
3783 self.db.getjournal('a', bid)
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3784
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3785 def test_removeClass(self):
2198
41a73b06d2ee *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2197
diff changeset
3786 self.init_ab()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3787 aid = self.db.a.create(name='apple')
2198
41a73b06d2ee *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2197
diff changeset
3788 bid = self.db.b.create(name='bear')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3789 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3790
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3791 # drop the b class
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3792 self.init_a()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3793 self.assertEqual(self.db.a.get(aid, 'name'), 'apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3794 self.assertEqual(self.db.a.lookup('apple'), aid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3795 self.db.commit(); self.db.close()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3796
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3797 # now check we can recall the added class' items
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3798 self.init_a()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3799 self.assertEqual(self.db.a.get(aid, 'name'), 'apple')
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3800 self.assertEqual(self.db.a.lookup('apple'), aid)
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3801
1883
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3802 # confirm journal's ok
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3803 self.db.getjournal('a', aid)
043e1b699047 more unit test work
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
3804
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
3805 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
3806 """ 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
3807 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
3808 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
3809 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
3810
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3811 class FilterCacheTest(commonDBTest):
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3812 def testFilteringTransitiveLinkCache(self):
6332
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
3813 ae, dummy = self.filteringSetupTransitiveSearch()
6a6b4651be1f Use server-side cursor for postgres in some cases
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6300
diff changeset
3814 ae, dummy = self.iterSetup('user')
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3815 # 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
3816 self.db.user.set('1', supervisor = '3')
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3817 self.db.user.set('2', supervisor = '3')
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3818 self.db.user.set('3', supervisor = '3')
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3819 # test bool value
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3820 self.db.user.set('4', assignable = True)
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3821 self.db.user.set('3', assignable = False)
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3822 filt = self.db.issue.filter_iter
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3823 ufilt = self.db.user.filter_iter
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3824 user_result = \
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3825 { '1' : {'username': 'admin', 'assignable': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3826 'supervisor': '3', 'realname': None, 'roles': 'Admin',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3827 'creator': '1', 'age': None, 'actor': '1',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3828 'address': None}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3829 , '2' : {'username': 'fred', 'assignable': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3830 'supervisor': '3', 'realname': None, 'roles': 'User',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3831 'creator': '1', 'age': None, 'actor': '1',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3832 'address': 'fred@example.com'}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3833 , '3' : {'username': 'ceo', 'assignable': False,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3834 'supervisor': '3', 'realname': None, 'roles': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3835 'creator': '1', 'age': 129.0, 'actor': '1',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3836 'address': None}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3837 , '4' : {'username': 'grouplead1', 'assignable': True,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3838 'supervisor': '3', 'realname': None, 'roles': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3839 'creator': '1', 'age': 29.0, 'actor': '1',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3840 'address': None}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3841 , '5' : {'username': 'grouplead2', 'assignable': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3842 'supervisor': '3', 'realname': None, 'roles': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3843 'creator': '1', 'age': 29.0, 'actor': '1',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3844 'address': None}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3845 , '6' : {'username': 'worker1', 'assignable': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3846 'supervisor': '4', 'realname': None, 'roles': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3847 'creator': '1', 'age': 25.0, 'actor': '1',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3848 'address': None}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3849 , '7' : {'username': 'worker2', 'assignable': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3850 'supervisor': '4', 'realname': None, 'roles': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3851 'creator': '1', 'age': 24.0, 'actor': '1',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3852 'address': None}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3853 , '8' : {'username': 'worker3', 'assignable': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3854 'supervisor': '5', 'realname': None, 'roles': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3855 'creator': '1', 'age': 23.0, 'actor': '1',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3856 'address': None}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3857 , '9' : {'username': 'worker4', 'assignable': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3858 'supervisor': '5', 'realname': None, 'roles': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3859 'creator': '1', 'age': 22.0, 'actor': '1',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3860 'address': None}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3861 , '10' : {'username': 'worker5', 'assignable': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3862 'supervisor': '5', 'realname': None, 'roles': None,
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3863 'creator': '1', 'age': 21.0, 'actor': '1',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3864 'address': None}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3865 }
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3866 foo = date.Interval('-1d')
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3867 issue_result = \
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3868 { '1' : {'title': 'ts1', 'status': '2', 'assignedto': '6',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3869 'priority': '3', 'messages' : ['4'], 'nosy' : ['4']}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3870 , '2' : {'title': 'ts2', 'status': '1', 'assignedto': '6',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3871 'priority': '3', 'messages' : ['4'], 'nosy' : ['5']}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3872 , '3' : {'title': 'ts4', 'status': '2', 'assignedto': '7',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3873 'priority': '3', 'messages' : ['5']}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3874 , '4' : {'title': 'ts5', 'status': '1', 'assignedto': '8',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3875 'priority': '3', 'messages' : ['6']}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3876 , '5' : {'title': 'ts6', 'status': '2', 'assignedto': '9',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3877 'priority': '3', 'messages' : ['7']}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3878 , '6' : {'title': 'ts7', 'status': '1', 'assignedto': '10',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3879 'priority': '3', 'messages' : ['8'], 'foo' : None}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3880 , '7' : {'title': 'ts8', 'status': '2', 'assignedto': '10',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3881 'priority': '3', 'messages' : ['8'], 'foo' : foo}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3882 , '8' : {'title': 'ts9', 'status': '1', 'assignedto': '10',
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3883 'priority': '3', 'messages' : ['7', '8']}
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3884 }
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3885 result = []
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3886 self.db.clearCache()
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3887 for id in ufilt(None, {}, [('+','supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3888 ('-','supervisor.supervisor'), ('-','supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3889 ('+','username')]):
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3890 result.append(id)
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3891 nodeid = id
6413
7b1b6dffc7ed Fix searching+sorting for Link properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6412
diff changeset
3892 # Note in the recent implementation we do not recursively
7b1b6dffc7ed Fix searching+sorting for Link properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6412
diff changeset
3893 # cache results in filter_iter
7b1b6dffc7ed Fix searching+sorting for Link properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6412
diff changeset
3894 assert(('user', nodeid) in self.db.cache)
7b1b6dffc7ed Fix searching+sorting for Link properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6412
diff changeset
3895 n = self.db.user.getnode(nodeid)
7b1b6dffc7ed Fix searching+sorting for Link properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6412
diff changeset
3896 for k, v in user_result[nodeid].items():
7b1b6dffc7ed Fix searching+sorting for Link properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6412
diff changeset
3897 ae((k, n[k]), (k, v))
7b1b6dffc7ed Fix searching+sorting for Link properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6412
diff changeset
3898 for k in 'creation', 'activity':
7b1b6dffc7ed Fix searching+sorting for Link properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6412
diff changeset
3899 assert(n[k])
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3900 self.db.clearCache()
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3901 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
3902
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3903 result = []
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3904 self.db.clearCache()
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3905 for id in filt(None, {},
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3906 [('+','assignedto.supervisor.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3907 ('+','assignedto.supervisor.supervisor'),
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3908 ('-','assignedto.supervisor'), ('+','assignedto')]):
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3909 result.append(id)
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3910 assert(('issue', id) in self.db.cache)
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3911 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
3912 for k, v in issue_result[id].items():
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3913 ae((k, n[k]), (k, v))
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3914 for k in 'creation', 'activity':
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3915 assert(n[k])
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3916 nodeid = n.assignedto
6413
7b1b6dffc7ed Fix searching+sorting for Link properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6412
diff changeset
3917 # Note in the recent implementation we do not recursively
7b1b6dffc7ed Fix searching+sorting for Link properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6412
diff changeset
3918 # cache results in filter_iter
7b1b6dffc7ed Fix searching+sorting for Link properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6412
diff changeset
3919 n = self.db.user.getnode(nodeid)
7b1b6dffc7ed Fix searching+sorting for Link properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6412
diff changeset
3920 for k, v in user_result[nodeid].items():
7b1b6dffc7ed Fix searching+sorting for Link properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6412
diff changeset
3921 ae((k, n[k]), (k, v))
7b1b6dffc7ed Fix searching+sorting for Link properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6412
diff changeset
3922 for k in 'creation', 'activity':
7b1b6dffc7ed Fix searching+sorting for Link properties
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6412
diff changeset
3923 assert(n[k])
4472
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3924 self.db.clearCache()
34dce76bb202 Multilink fixes and optimizations:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4448
diff changeset
3925 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
3926
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3927
5033
63c79c0992ae Update tests to work with py.test
John Kristensen <john@jerrykan.com>
parents: 4886
diff changeset
3928 class ClassicInitBase(object):
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3929 count = 0
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3930 db = None
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3931
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3932 def setUp(self):
4878
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3933 ClassicInitBase.count = ClassicInitBase.count + 1
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3934 self.dirname = '_test_init_%s'%self.count
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3935 try:
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3936 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
3937 except OSError as error:
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3938 if error.errno not in (errno.ENOENT, errno.ESRCH): raise
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3939
4878
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3940 def tearDown(self):
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3941 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
3942 self.db.close()
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3943 try:
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3944 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
3945 except OSError as error:
4878
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3946 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
3947
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3948 class ClassicInitTest(ClassicInitBase):
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3949 def testCreation(self):
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3950 ae = self.assertEqual
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3951
2820
da2a9175eb83 tracker setup put in separate function for use in other test suites
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2754
diff changeset
3952 # 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
3953 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
3954 # open the database
2689
9d044127c5eb tracker.open() requires the 2nd argument - journal tag name
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2687
diff changeset
3955 db = self.db = tracker.open('test')
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3956
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3957 # check the basics of the schema and initial data set
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3958 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
3959 l.sort()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3960 ae(l, ['1', '2', '3', '4', '5'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3961 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
3962 l.sort()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3963 ae(l, ['1', '2', '3', '4', '5', '6', '7', '8'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3964 l = db.keyword.list()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3965 ae(l, [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3966 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
3967 l.sort()
1873
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3968 ae(l, ['1', '2'])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3969 l = db.msg.list()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3970 ae(l, [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3971 l = db.file.list()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3972 ae(l, [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3973 l = db.issue.list()
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3974 ae(l, [])
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3975
f63aa57386b0 Backend improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3976
4878
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
3977 class ConcurrentDBTest(ClassicInitBase):
4448
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3978 def testConcurrency(self):
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3979 # 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
3980 # 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
3981 # 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
3982 # on the previous value.
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3983
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3984 # 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
3985 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
3986 # open the database
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3987 self.db = tracker.open('admin')
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3988
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3989 prio = '1'
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3990 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
3991 def inc(db):
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3992 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
3993
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3994 inc(self.db)
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3995
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3996 db2 = tracker.open("admin")
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3997 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
3998 db2.commit()
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
3999 self.db.commit()
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
4000 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
4001
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
4002 inc(db2)
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
4003 db2.commit()
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
4004 db2.clearCache()
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
4005 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
4006 db2.close()
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
4007
4878
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4008 class HTMLItemTest(ClassicInitBase):
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4009 class Request :
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4010 """ Fake html request """
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4011 rfile = None
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4012 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
4013 pass
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4014 # end def start_response
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4015 # end class Request
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4016
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4017 def setUp(self):
6148
8497bf3f23a1 Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6118
diff changeset
4018 super(HTMLItemTest, self).setUp()
4878
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4019 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
4020 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
4021 req = self.Request()
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4022 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
4023 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
4024 self.client.db = db
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4025 self.client.language = None
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4026 self.client.userid = db.getuid()
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4027 self.client.classname = 'issue'
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4028 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
4029 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
4030 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
4031 , 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
4032 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
4033 '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
4034 self.db.issue.create(**issue)
4879
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
4035 issue = {'title': 'ts2', 'status': '2',
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
4036 'messages' : [u_m], 'nosy' : ['3']}
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
4037 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
4038
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4039 def testHTMLItemAttributes(self):
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4040 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
4041 ae = self.assertEqual
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4042 ae(issue.title.plain(),'ts1')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4043 ae(issue ['title'].plain(),'ts1')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4044 ae(issue.status.plain(),'deferred')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4045 ae(issue ['status'].plain(),'deferred')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4046 ae(issue.assignedto.plain(),'worker5')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4047 ae(issue ['assignedto'].plain(),'worker5')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4048 ae(issue.priority.plain(),'bug')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4049 ae(issue ['priority'].plain(),'bug')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4050 ae(issue.messages.plain(),'1')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4051 ae(issue ['messages'].plain(),'1')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4052 ae(issue.nosy.plain(),'worker5')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4053 ae(issue ['nosy'].plain(),'worker5')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4054 ae(len(issue.messages),1)
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4055 ae(len(issue ['messages']),1)
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4056 ae(len(issue.nosy),1)
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4057 ae(len(issue ['nosy']),1)
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4058
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4059 def testHTMLItemDereference(self):
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4060 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
4061 ae = self.assertEqual
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4062 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
4063 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
4064 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
4065 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
4066 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
4067 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
4068 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
4069 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
4070 for n in issue.nosy:
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4071 ae(n.username.plain(),'worker5')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4072 ae(n['username'].plain(),'worker5')
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4073 for n in issue.messages:
f6e76a03b502 HTML* classes for cgi are now all new-style
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4876
diff changeset
4074 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
4075 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
4076 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
4077 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
4078
4448
2784c239e6c8 clear the cache on commit for rdbms backends:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4421
diff changeset
4079
4879
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
4080 def testHTMLItemDerefFail(self):
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
4081 issue = HTMLItem(self.client, 'issue', '2')
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
4082 ae = self.assertEqual
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
4083 ae(issue.assignedto.plain(),'')
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
4084 ae(issue ['assignedto'].plain(),'')
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
4085 ae(issue.priority.plain(),'')
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
4086 ae(issue ['priority'].plain(),'')
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
4087 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
4088 ae(str(issue.priority.name),m%'name')
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
4089 ae(str(issue ['priority'].name),m%'name')
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
4090 ae(str(issue.assignedto.username),m%'username')
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
4091 ae(str(issue ['assignedto'].username),m%'username')
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
4092 ae(bool(issue ['assignedto']['username']),False)
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
4093 ae(bool(issue ['priority']['name']),False)
302c967d710c HTML* classes for cgi: handle MissingValue case
Ralf Schlatterbeck <rsc@runtux.com>
parents: 4878
diff changeset
4094
5310
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4095 def makeForm(args):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4096 form = cgi.FieldStorage()
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4097 for k,v in args.items():
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4098 if type(v) is type([]):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4099 [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
4100 elif isinstance(v, FileUpload):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4101 x = cgi.MiniFieldStorage(k, v.content)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4102 x.filename = v.filename
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4103 form.list.append(x)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4104 else:
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4105 form.list.append(cgi.MiniFieldStorage(k, v))
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4106 return form
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4107
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4108 class FileUpload:
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4109 def __init__(self, content, filename):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4110 self.content = content
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4111 self.filename = filename
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4112
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4113 class FormTestParent(object):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4114
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4115 backend = "anydbm"
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4116 def setupDetectors(self):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4117 pass
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4118
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4119 def setUp(self):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4120 self.dirname = '_test_cgi_form'
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4121 # set up and open a tracker
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4122 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
4123
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4124 # We may want to register separate detectors
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4125 self.setupDetectors()
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4126
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4127 # open the database
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4128 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
4129 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
4130 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
4131 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
4132 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
4133 self.db.tx_Source = "web"
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4134 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
4135 realname='Bork, Chef', roles='User')
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4136 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
4137 roles='User', realname='Contrary, Mary')
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4138
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4139 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
4140 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
4141 self.db.post_init()
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4142
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4143 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
4144 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
4145 'REQUEST_METHOD':'POST'}, makeForm(form))
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4146 cl.classname = classname
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4147 cl.base = 'http://whoami.com/path/'
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4148 cl.nodeid = nodeid
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4149 cl.language = ('en',)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4150 cl.userid = '1'
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4151 cl.db = self.db
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4152 cl.user = 'admin'
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4153 cl.template = template
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4154 if env_addon is not None:
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4155 cl.env.update(env_addon)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4156 return cl
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4157
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
4158 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
4159 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
4160
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
4161 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
4162 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
4163
5310
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4164 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
4165 cl = self.setupClient(form, classname, nodeid)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4166 return cl.parsePropsFromForm(create=1)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4167
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4168 def tearDown(self):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4169 self.db.close()
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4170 try:
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4171 shutil.rmtree(self.dirname)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4172 except OSError as error:
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4173 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
4174
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4175 class SpecialAction(actions.EditItemAction):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4176 x = False
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4177 def handle(self):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4178 self.__class__.x = True
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4179 cl = self.db.getclass(self.classname)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4180 cl.set(self.nodeid, status='2')
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4181 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
4182 assert 0, "not reached"
5310
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4183 self.db.commit()
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4184
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4185 def reject_title(db, cl, nodeid, newvalues):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4186 if 'title' in newvalues:
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4187 raise Reject ("REJECT TITLE CHANGE")
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4188
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4189 def init_reject(db):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4190 db.issue.audit("set", reject_title)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4191
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4192 def get_extensions(self, what):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4193 """ 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
4194 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
4195 auditors/reactors.
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4196 """
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4197 if what == 'detectors':
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4198 return [init_reject]
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4199 return self._get_extensions(what)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4200
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4201 class SpecialActionTest(FormTestParent):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4202
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4203 def setupDetectors(self):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4204 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
4205 def ge(what):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4206 return get_extensions(self.instance, what)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4207 self.instance.get_extensions = ge
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4208
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4209 def setUp(self):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4210 FormTestParent.setUp(self)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4211
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4212 self.instance.registerAction('special', SpecialAction)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4213 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
4214 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
4215 if 'SENDMAILDEBUG' not in os.environ:
5310
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4216 os.environ['SENDMAILDEBUG'] = 'mail-test2.log'
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4217 self.SENDMAILDEBUG = os.environ['SENDMAILDEBUG']
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4218 page_template = """
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4219 <html>
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4220 <body>
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4221 <p tal:condition="options/error_message|nothing"
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4222 tal:repeat="m options/error_message"
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4223 tal:content="structure m"/>
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4224 <p tal:content="context/title/plain"/>
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4225 <p tal:content="context/status/plain"/>
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4226 <p tal:content="structure context/submit"/>
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4227 </body>
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4228 </html>
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4229 """.strip ()
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4230 self.form = {':action': 'special'}
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4231 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
4232 pt = RoundupPageTemplate()
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4233 pt.pt_edit(page_template, 'text/html')
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4234 self.out = []
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4235 def wh(s):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4236 self.out.append(s)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4237 cl.write_html = wh
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4238 def load_template(x):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4239 return pt
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4240 cl.instance.templates.load = load_template
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4241 cl.selectTemplate = MockNull()
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4242 cl.determine_context = MockNull ()
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4243 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
4244 return True
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4245 self.hasPermission = actions.Action.hasPermission
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4246 actions.Action.hasPermission = hasPermission
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4247 self.e1 = _HTMLItem.is_edit_ok
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4248 _HTMLItem.is_edit_ok = lambda x : True
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4249 self.e2 = HTMLProperty.is_edit_ok
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4250 HTMLProperty.is_edit_ok = lambda x : True
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4251 # Make sure header check passes
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4252 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
4253 self.client = cl
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4254
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4255 def tearDown(self):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4256 FormTestParent.tearDown(self)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4257 # Remove monkey-patches
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4258 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
4259 del self.instance._get_extensions
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4260 actions.Action.hasPermission = self.hasPermission
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4261 _HTMLItem.is_edit_ok = self.e1
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4262 HTMLProperty.is_edit_ok = self.e2
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4263 if os.path.exists(self.SENDMAILDEBUG):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4264 #os.remove(self.SENDMAILDEBUG)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4265 pass
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4266
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4267 def testInnerMain(self):
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4268 cl = self.client
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4269 cl.session_api = MockNull(_sid="1234567890")
5488
52cb53eedf77 reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5481
diff changeset
4270 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
4271 cl.form = makeForm(self.form)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4272 # inner_main will re-open the database!
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4273 # 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
4274 # 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
4275 # 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
4276 cl.inner_main()
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4277 cl.db.close()
5376
64b05e24dbd8 Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5330
diff changeset
4278 print(self.out)
5310
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4279 # Make sure the action was called
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4280 self.assertEqual(SpecialAction.x, True)
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4281 # Check that the Reject worked:
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4282 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
4283 # Re-open db
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4284 self.db.close()
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4285 self.db = self.instance.open ('admin')
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4286 # We shouldn't see any changes
efb34cbdba7c Add (currently failing) test for atomic actions
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5263
diff changeset
4287 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
4288 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
4289
2680
c26a9a5a25d2 rdbms backends require new config object. make one.
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2605
diff changeset
4290 # vim: set et sts=4 sw=4 :

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